Ejemplo n.º 1
0
    def create(self, initial=None, _subschema=None):
        """ Create a document from this schema by using the initial values from
        the schema, possibly overwriting them with the initial values from the
        `initial` parameter and leaving out any optional fields.

        :initial: A dictionary of initial values which overrule the initial
        values from the schema description. Default: empty.
        :return: A newly created dictionary matching the structure of the schema.
        """
        schema = _subschema or self._schema
        initial = initial or {}

        doc = {}

        for key, field in schema.iteritems():
            # Do not create default dictionary if key is a type, e.g.
            # unicode, since we don't know a key name
            if isinstance(key, types.TypeType):
                continue

            if not field.optional:
                if isinstance(field, DictField):
                    doc[key] = self.create(initial.get(key, {}),
                                           _subschema=field._schema)
                elif hasattr(field.default, u'__call__'):
                    doc[key] = field.default()
                else:
                    doc[key] = field.default

        update_recursive(doc, initial)

        return doc
Ejemplo n.º 2
0
 def test_update_recursive_skip_none(self):
     """ Test 'skip_none' parameter. """
     self.assertEquals({u'a': {}},
                       update_recursive({}, {u'a': {
                           u'b': None
                       }},
                                        skip_none=True))
     self.assertEquals({u'a': {}},
                       update_recursive({u'a': 0}, {u'a': {
                           u'b': None
                       }},
                                        skip_none=True))
     self.assertEquals({u'a': 0},
                       update_recursive({u'a': 0}, {u'a': None},
                                        skip_none=True))
Ejemplo n.º 3
0
 def test_update_recursive_nested(self):
     self.assertEquals({u'a': {
         u'b': 1
     }}, update_recursive({}, {u'a': {
         u'b': 1
     }}))
     self.assertEquals({u'a': {
         u'b': 1
     }}, update_recursive({u'a': 0}, {u'a': {
         u'b': 1
     }}))
     self.assertEquals({u'a': {
         u'b': None
     }}, update_recursive({u'a': 0}, {u'a': {
         u'b': None
     }}))
Ejemplo n.º 4
0
 def test_update_recursive_skip_none(self):
     """ Test 'skip_none' parameter. """
     self.assertEquals({u'a': {}}, update_recursive({}, {u'a': {u'b': None}}, skip_none=True))
     self.assertEquals({u'a': {}}, update_recursive({u'a': 0}, {u'a': {u'b': None}}, skip_none=True))
     self.assertEquals({u'a': 0}, update_recursive({u'a': 0}, {u'a': None}, skip_none=True))
Ejemplo n.º 5
0
 def test_update_recursive_nested(self):
     self.assertEquals({u'a': {u'b': 1}}, update_recursive({}, {u'a': {u'b': 1}}))
     self.assertEquals({u'a': {u'b': 1}}, update_recursive({u'a': 0}, {u'a': {u'b': 1}}))
     self.assertEquals({u'a': {u'b': None}}, update_recursive({u'a': 0}, {u'a': {u'b': None}}))
Ejemplo n.º 6
0
 def test_update_recursive_simple(self):
     self.assertEquals({u'a': 1}, update_recursive({}, {u'a': 1}))
     self.assertEquals({u'a': 1}, update_recursive({u'a': 0}, {u'a': 1}))
     self.assertEquals({u'a': None}, update_recursive({u'a': 0}, {u'a': None}))
Ejemplo n.º 7
0
 def test_update_recursive_simple(self):
     self.assertEquals({u'a': 1}, update_recursive({}, {u'a': 1}))
     self.assertEquals({u'a': 1}, update_recursive({u'a': 0}, {u'a': 1}))
     self.assertEquals({u'a': None},
                       update_recursive({u'a': 0}, {u'a': None}))