Example #1
0
    def set_schema_defaults(self, schema, id_field):
        """ When not provided, fills individual schema settings with default
        or global configuration settings.

        :param schema: the resource schema to be initialized with default
                       values

        .. versionchanged: 0.6
           Add default ID_FIELD to the schema, so documents with an existing
           ID_FIELD can also be stored.

        .. versionchanged: 0.0.7
           Setting the default 'field' value would not happen if the
           'data_relation' was nested deeper than the first schema level (#60).

        .. versionadded: 0.0.5
        """

        # Don't set id_field 'unique' since we already handle
        # DuplicateKeyConflict in the mongo layer. This also
        # avoids a performance hit (with 'unique' rule set, we would
        # end up with an extra db loopback on every insert).
        if isinstance(schema, dict):
            schema.setdefault(id_field, {"type": "objectid"})

        # set default 'field' value for all 'data_relation' rulesets, however
        # nested
        for data_relation in list(extract_key_values("data_relation", schema)):
            data_relation.setdefault("field", id_field)
Example #2
0
    def set_schema_defaults(self, schema, id_field):
        """ When not provided, fills individual schema settings with default
        or global configuration settings.

        :param schema: the resource schema to be initialized with default
                       values

        .. versionchanged: 0.6
           Add default ID_FIELD to the schema, so documents with an existing
           ID_FIELD can also be stored.

        .. versionchanged: 0.0.7
           Setting the default 'field' value would not happen if the
           'data_relation' was nested deeper than the first schema level (#60).

        .. versionadded: 0.0.5
        """

        # id_field has to be 'unique'. Some data layers, e.g. the default mongo
        # layer ignore this validation rule to avoid a performance hit (with
        # 'unique' rule set, we would end up with an extra db loopback on every
        # insert).
        schema.setdefault(id_field, {
            'type': 'objectid',
            'unique': True
        })

        # set default 'field' value for all 'data_relation' rulesets, however
        # nested
        for data_relation in list(extract_key_values('data_relation', schema)):
            data_relation.setdefault('field', id_field)
Example #3
0
File: utils.py Project: sunbit/eve
 def test_extract_key_values(self):
     test = {
         "key1": "value1",
         "key2": {"key1": "value2", "nested": {"key1": "value3"}},
     }
     self.assertEqual(
         list(extract_key_values("key1", test)), ["value1", "value2", "value3"]
     )
 def test_extract_key_values(self):
     test = {
         'key1': 'value1',
         'key2': {
             'key1': 'value2',
             'nested': {
                 'key1': 'value3'
             }
         }
     }
     self.assertEqual(list(extract_key_values('key1', test)),
                      ['value1', 'value2', 'value3'])
Example #5
0
    def set_schema_defaults(self, schema):
        """ When not provided, fills individual schema settings with default
        or global configuration settings.

        :param schema: the resource schema to be initialized with default
                       values

        .. versionchanged: 0.0.7
           Setting the default 'field' value would not happen if the
           'data_relation' was nested deeper than the first schema level (#60).

        .. versionadded: 0.0.5
        """
        # TODO fill schema{} defaults, like field type, etc.

        # set default 'field' value for all 'data_relation' rulesets, however
        # nested
        for data_relation in list(extract_key_values('data_relation', schema)):
            data_relation.setdefault('field', self.config['ID_FIELD'])