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)
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)
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'])
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'])