Skip to content
This repository has been archived by the owner on Aug 2, 2019. It is now read-only.

Commit

Permalink
Add group of fields (fixes #11, fixes #88)
Browse files Browse the repository at this point in the history
  • Loading branch information
leplatrem committed Mar 3, 2014
1 parent 5229d0e commit 07bb0fe
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 2 deletions.
16 changes: 14 additions & 2 deletions daybed/schemas/base.py
Expand Up @@ -17,7 +17,8 @@
Regex,
Email,
Date,
DateTime
DateTime,
drop
)

from . import registry, TypeField
Expand All @@ -27,7 +28,7 @@
__all__ = ['IntField', 'StringField', 'RangeField',
'RegexField', 'EmailField', 'URLField',
'EnumField', 'ChoicesField', 'DecimalField',
'DateField', 'DateTimeField']
'DateField', 'DateTimeField', 'GroupField']


@registry.add('int')
Expand Down Expand Up @@ -209,3 +210,14 @@ class DateTimeField(AutoNowMixin, TypeField):
@deferred
def auto_value(node, kw):
return datetime.datetime.now()


@registry.add('group')
class GroupField(TypeField):
@classmethod
def definition(cls):
schema = super(GroupField, cls).definition()
schema.add(SchemaNode(String(), name='description', missing=drop))
schema.add(SchemaNode(Sequence(), TypeField.definition(), name='fields',
validator=Length(min=1)))
return schema
32 changes: 32 additions & 0 deletions daybed/tests/test_schemas_base.py
Expand Up @@ -145,6 +145,38 @@ def test_url(self):
'http://lolnet/org')


class GroupFieldTests(unittest.TestCase):
def setUp(self):
self.schema = schemas.GroupField.definition()
self.definition = {'type': u'group',
'name': u'adress',
'label': u'Address',
'required': True,
'hint': u'Fill all fields',
'description': u'A small text...',
'fields': [{'type': u'int',
'name': u'a',
'hint': u'',
'label': u'',
'required': True}]}

def test_a_group_can_have_label_and_description(self):
field = self.schema.deserialize(self.definition)
self.assertDictEqual(self.definition, field)

def test_a_group_must_have_at_least_one_field(self):
definition = self.definition.copy()
definition['fields'] = []
self.assertRaises(colander.Invalid, self.schema.deserialize,
definition)

def test_a_group_must_have_valid_fields(self):
definition = self.definition.copy()
definition['fields'].append({'type': u'int'})
self.assertRaises(colander.Invalid, self.schema.deserialize,
definition)


class DateFieldTests(unittest.TestCase):
def test_date(self):
schema = schemas.DateField.definition()
Expand Down

0 comments on commit 07bb0fe

Please sign in to comment.