def test_walk(self): self.assertEquals([(u'a', 1)], list(walk({'a': 1}))) # test if keys are yielded self.assertEquals([(u'a', {u'b': 1}), (u'a.b', 1)], list(walk({u'a': {'b': 1}}))) result = list(walk({u'a': {'b': 1, u'c': 2}})) self.assertTrue((u'a.b', 1) in result) self.assertTrue((u'a.c', 2) in result)
def test_walk(self): self.assertEquals([(u'a', 1)], list(walk({'a': 1}))) # test if keys are yielded self.assertEquals([(u'a', { u'b': 1 }), (u'a.b', 1)], list(walk({u'a': { 'b': 1 }}))) result = list(walk({u'a': {'b': 1, u'c': 2}})) self.assertTrue((u'a.b', 1) in result) self.assertTrue((u'a.c', 2) in result)
def to_schema(self, doc): # Work on a copy src_doc = DotNotationAdapter(dict(doc)) dest_doc = DotNotationAdapter() # Rename fields for rename_key, rename_value in self.rename_inv: if rename_key in src_doc: dest_doc[rename_value] = src_doc[rename_key] del src_doc[rename_key] # Map fields for key, value in walk(src_doc): if key in self.exclude_to: continue dest_key, dest_value = self.map_to(key, value) dest_doc[dest_key] = dest_value return dest_doc.doc
def from_schema(self, doc): # Exclude and map fields src_doc = DotNotationAdapter(doc) dest_doc = DotNotationAdapter() for key, value in walk(src_doc): if self.exclude_field(src_doc, key): continue dest_key, dest_value = self.map_from(key, value) if isinstance(value, collections.MutableMapping): dest_doc[dest_key] = dest_value.__class__() else: dest_doc[dest_key] = dest_value # Rename keys for rename_key, rename_value in self.rename: if rename_key in dest_doc: dest_doc[rename_value] = dest_doc[rename_key] del dest_doc[rename_key] return dest_doc.doc