Permalink
Browse files

New name is Hopak

  • Loading branch information...
1 parent ebc7401 commit 4b4391d5a62dd9827cd6c2ae7b6fc355b8316867 @xen committed Dec 19, 2012
View
@@ -1,7 +1,7 @@
*.py[co]
.DS_Store
.installed.cfg
-formgear.egg-info
+hopak.egg-info
bin
etc
.idea
View
@@ -1,26 +1,26 @@
# file GENERATED by distutils, do NOT edit
README.rst
setup.py
-formgear/__init__.py
-formgear/controllers.py
-formgear/exceptions.py
-formgear/fields.py
-formgear/forms.py
-formgear/loader.py
-formgear/models.py
-formgear/registry.py
-formgear/utils.py
-formgear/widgets.py
-formgear/templates/form.html
-formgear/templates/form_old.html
-formgear/templates/widgets/base_widget.html
-formgear/templates/widgets/boolean.html
-formgear/templates/widgets/checkbox.html
-formgear/templates/widgets/email.html
-formgear/templates/widgets/markdown.html
-formgear/templates/widgets/password.html
-formgear/templates/widgets/pricerange.html
-formgear/templates/widgets/select.html
-formgear/templates/widgets/string.html
-formgear/templates/widgets/text.html
-formgear/templates/widgets/timerange.html
+hopak/__init__.py
+hopak/controllers.py
+hopak/exceptions.py
+hopak/fields.py
+hopak/forms.py
+hopak/loader.py
+hopak/models.py
+hopak/registry.py
+hopak/utils.py
+hopak/widgets.py
+hopak/templates/form.html
+hopak/templates/form_old.html
+hopak/templates/widgets/base_widget.html
+hopak/templates/widgets/boolean.html
+hopak/templates/widgets/checkbox.html
+hopak/templates/widgets/email.html
+hopak/templates/widgets/markdown.html
+hopak/templates/widgets/password.html
+hopak/templates/widgets/pricerange.html
+hopak/templates/widgets/select.html
+hopak/templates/widgets/string.html
+hopak/templates/widgets/text.html
+hopak/templates/widgets/timerange.html
View
@@ -1,3 +1,3 @@
include *html
include *rst
-recursive-include formgear/templates *html
+recursive-include hopak/templates *html
View
@@ -1,10 +1,12 @@
-Formgear
-#########
+Hopak
+######
-.. image:: https://secure.travis-ci.org/xen/formgear.png
- :target: https://travis-ci.org/xen/formgear
+Formely project name was ``formgear``.
-Main idea behind ``formgear`` allow iteratively create data models in easy
+.. image:: https://secure.travis-ci.org/xen/hopak.png
+ :target: https://travis-ci.org/xen/hopak
+
+Main idea behind ``hopak`` allow iteratively create data models in easy
readable form and use them as part of your websites. At this moment only
MongoDB is allowed.
@@ -19,10 +21,10 @@ But we are living in 21 century, have decoded DNA, pushing frontier into
space, digging into core of the atoms and listening dubstep! Why we must to
write all that crap? Why computers cann't just do all this stuff?
-So that is why we invent ``formgear``. Because we want computers to do that they
+So that is why we invent ``hopak``. Because we want computers to do that they
supposed to do.
-`formgear` is only part of this effort, but there are already some results. So,
+`hopak` is only part of this effort, but there are already some results. So,
example how to make simple model. We use `YAML` because it is very human
readable. Minimal file::
@@ -40,11 +42,11 @@ readable. Minimal file::
This file is enough to use it as model in your python code::
# models.py
- from formgear.models import Model
+ from hopak.models import Model
class User(Model):
__yaml__ = 'user.yaml'
-``formgear`` is only a library for bigger framework, if you decide to use the whole
+``hopak`` is only a library for bigger framework, if you decide to use the whole
stack then you will get site with admin section including list, edit, add,
search, delete sections for each models.
@@ -64,10 +66,10 @@ More
Links:
-* ``formgear`` page on PyPI: `http://pypi.python.org/pypi/formgear/
- <http://pypi.python.org/pypi/formgear/>`_
-* Github page: `https://github.com/xen/formgear
- <https://github.com/xen/formgear>`_
+* ``hopak`` page on PyPI: `http://pypi.python.org/pypi/hopak/
+ <http://pypi.python.org/pypi/hopak/>`_
+* Github page: `https://github.com/xen/hopak
+ <https://github.com/xen/hopak>`_
More documentation is approaching.
View
@@ -1,8 +1,8 @@
-# formgear
+# hopak
**Внимание, код не является полностью работающим, но является прототипом. Цель публикации документации — привлечь внимание**
-formgear — это активно развиваемый проект идея которого в том, чтобы максимально упростить работу по созданию сайтов.
+hopak — это активно развиваемый проект идея которого в том, чтобы максимально упростить работу по созданию сайтов.
Когда планирую сайт, то делаю его в несколько простых этапов. Перый - это подготовка чего-то типа "карты сайта". Обычно
назваю этот документ `sitemap.txt`. Пример такого документа:
@@ -32,7 +32,7 @@ formgear — это активно развиваемый проект идея
- Картинка
Как программисту кажется, что такого описания уже должно быть достаточно чтобы нажать какую-то магическую кнопку и
-получить работающий сайт. Для этого и создается **formgear**. Взять какой-то простой и предсказуемый синтаксис
+получить работающий сайт. Для этого и создается **hopak**. Взять какой-то простой и предсказуемый синтаксис
(никакого сраного XML) и сделать так чтобы после создания документов все магическим образом заработало.
На данный момент в проекте уже реализовано создание моделей в очень простом декларативном стиле, либо с помощью
@@ -84,16 +84,16 @@ fields:
В текущий момент реализован следующий путь:
```python
-from formgear.models import Model
+from hopak.models import Model
class NewsYAML(Model):
__yaml__ = 'news.yaml'
# тут код который вы хотите использовать дополнительно
# он может прекрывать определения из yaml файла
# этот код эквивалентен приблизительно следующему python коду
-from formgear.fields import *
-from formgear.widgets import *
+from hopak.fields import *
+from hopak.widgets import *
class NewsPy(Model):
title = StringField(title="News Title", length=80, required=True)
@@ -127,5 +127,5 @@ TODO:
- пока нет url роутингов, но пример идеи можно посмотреть в `test/data/sample/sitemap.yaml`
- не понятно будет ли этот проект оформлен как библиотека которую можно будет использовать
в любых своих проектах или будет тесно связан с каким-то фреймворком
-- formgear дурацкое название, скорее всего будет придумано какое-то более эпичное
+- hopak дурацкое название, скорее всего будет придумано какое-то более эпичное
- нет вообще никаких тестов
View
@@ -3,7 +3,7 @@
__author__ = 'xen'
-from formgear.models import Model #, ModelRegistry
+from hopak.models import Model #, ModelRegistry
class User(Model):
__yaml__ = 'doctype'
View
@@ -1 +0,0 @@
-# -*- coding: utf-8 -*-
View
@@ -1,123 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-
-""" Basic validators
-"""
-import re
-from formgear.exceptions import NotFoundValidatorException, InvalidValue
-from registry import Registry
-import inspect
-
-import sys
-
-PY3 = sys.version_info[0] == 3
-
-if PY3: # pragma: no cover
- string_types = str,
- text_type = str
-else:
- string_types = basestring,
- text_type = unicode
-
-class ValidatorRegistry(Registry):
- NotFound = NotFoundValidatorException
-
-class MetaValidator(type):
- """
- Class for all validators
- """
- def __new__(cls, name, bases, attrs):
- registername = attrs.pop('name', name.lower())
- newbornclass = super(MetaValidator, cls).__new__(cls, name, bases, attrs)
- ValidatorRegistry.register(newbornclass, registername)
- return newbornclass
-
-class BaseValidator(object):
- """ All vaidators should be child of this class to add themself to registry
- """
- __metaclass__ = MetaValidator
-
-
-class Required(BaseValidator):
- """ Validator which tests is value empty."""
- def __init__(self):
- pass
-
- def __call__(self, node, value):
- if not value:
- raise InvalidValue(node, "is required")
-
-class Regex(BaseValidator):
- def __init__(self, regex, msg=None):
- if isinstance(regex, string_types):
- self.match_object = re.compile(regex)
- else:
- self.match_object = regex
- if msg is None:
- self.msg = "String does not match expected pattern"
- else:
- self.msg = msg
-
- def __call__(self, node, value):
- if self.match_object.match(value) is None:
- raise InvalidValue(node, self.msg)
-
-class Email(Regex):
- """ Email address validator.
- """
- def __init__(self, msg=None):
- if msg is None:
- msg = _("Invalid email address")
- super(Email, self).__init__(regex='(?i)^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$', msg=msg)
-
-class Length(BaseValidator):
- """ Validator which succeeds if the value passed to it has a
- length between a minimum and maximum. The value is most often a
- string."""
- min_err = 'Shorter than minimum length %s'
- max_err = 'Longer than maximum length %s'
-
- def __init__(self, min=None, max=None):
- self.min = min
- self.max = max
-
- def __call__(self, node, value):
- if self.min is not None:
- if len(value) < self.min:
- raise InvalidValue(node, self.min_err % str(self.min))
-
- if self.max is not None:
- if len(value) > self.max:
- raise InvalidValue(node, self.max_err % str(self.max))
-
-class Max(BaseValidator):
- """ Validate if value not great than `value`
- """
-
- text_err = 'Current value - %d is great than max %d'
-
- def __init__(self, value=None):
- self.value = value
-
- def __call__(self, node, value):
- if self.value is not None:
- if self.value < value:
- raise InvalidValue(node, self.text_err % (self.value, value,))
-
-class Min(BaseValidator):
- """ Validate if value not less than `value`
- """
-
- text_err = 'Current value - %d is less than min %d'
-
- def __init__(self, value=None):
- self.value = value
-
- def __call__(self, node, value):
- if self.value is not None:
- if self.value > value:
- raise InvalidValue(node, self.text_err % (self.value, value,))
-
-
-def lookup(lvs={}):
- return [ValidatorRegistry.resolve(validator)(**lvs[validator]) for validator in lvs]
View
@@ -1,17 +0,0 @@
-__all__ = ['ConnectionError', 'register_datasource',
- 'get_datasource', 'DEFAULT_DATASOURCE_NAME']
-
-DEFAULT_DATASOURCE_NAME = 'default'
-
-class ConnectionError(Exception):
- pass
-
-_datasources = {}
-
-def register_datasource(ds, alias=DEFAULT_DATASOURCE_NAME):
- global _datasources
- _datasources[alias] = ds
-
-def get_datasource(alias=DEFAULT_DATASOURCE_NAME):
- global _datasources
- return _datasources[alias]
View
@@ -1,37 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-
-class BaseDS(object):
- """ Data source interface
- """
-
- def __init__(self, conn):
- self.conn = conn
-
- def save(self, id):
- raise NotImplemented
-
- def get(self, id):
- raise NotImplemented
-
- def delete(self, id):
- raise NotImplemented
-
- def save_multi(self, ids=[]):
- raise NotImplemented
-
- def get_multi(self, ids=[]):
- raise NotImplemented
-
- def delete_multi(self, ids=[]):
- raise NotImplemented
-
- def query(self):
- raise NotImplemented
-
- def count(self):
- raise NotImplemented
-
- def disconnect(self):
- raise NotImplemented
-
Oops, something went wrong.

0 comments on commit 4b4391d

Please sign in to comment.