fixed same bug for nested List inside MapField, little code refactoring, added test for nested list and nested reference fields
This commit is contained in:
		| @@ -219,11 +219,9 @@ class DeReference(object): | ||||
|                         data[k]._data[field_name] = self.object_map.get(v.id, v) | ||||
|                     elif isinstance(v, (dict, SON)) and '_ref' in v: | ||||
|                         data[k]._data[field_name] = self.object_map.get(v['_ref'].id, v) | ||||
|                     elif isinstance(v, dict) and depth <= self.max_depth: | ||||
|                     elif isinstance(v, (dict, list, tuple)) and depth <= self.max_depth: | ||||
|                         item_name = "{0}.{1}.{2}".format(name, k, field_name) | ||||
|                         data[k]._data[field_name] = self._attach_objects(v, depth, instance=instance, name=item_name) | ||||
|                     elif isinstance(v, (list, tuple)) and depth <= self.max_depth: | ||||
|                         data[k]._data[field_name] = self._attach_objects(v, depth, instance=instance, name=name) | ||||
|             elif isinstance(v, (dict, list, tuple)) and depth <= self.max_depth: | ||||
|                 item_name = '%s.%s' % (name, k) if name else name | ||||
|                 data[k] = self._attach_objects(v, depth - 1, instance=instance, name=item_name) | ||||
|   | ||||
| @@ -828,12 +828,17 @@ class DeltaTest(unittest.TestCase): | ||||
|         self.assertEqual(org2.name, 'New Org 2') | ||||
|  | ||||
|     def test_delta_for_nested_map_fields(self): | ||||
|         class UInfoDocument(Document): | ||||
|             phone = StringField() | ||||
|  | ||||
|         class EmbeddedRole(EmbeddedDocument): | ||||
|             type = StringField() | ||||
|  | ||||
|         class EmbeddedUser(EmbeddedDocument): | ||||
|             name = StringField() | ||||
|             roles = MapField(field=EmbeddedDocumentField(EmbeddedRole)) | ||||
|             rolist = ListField(field=EmbeddedDocumentField(EmbeddedRole)) | ||||
|             info = ReferenceField(UInfoDocument) | ||||
|  | ||||
|         class Doc(Document): | ||||
|             users = MapField(field=EmbeddedDocumentField(EmbeddedUser)) | ||||
| @@ -845,11 +850,21 @@ class DeltaTest(unittest.TestCase): | ||||
|         doc.users["007"] = EmbeddedUser(name="Agent007") | ||||
|         doc.save() | ||||
|  | ||||
|         uinfo = UInfoDocument(phone="79089269066") | ||||
|         uinfo.save() | ||||
|  | ||||
|         d = Doc.objects(num=1).first() | ||||
|         d.users["007"]["roles"]["666"] = EmbeddedRole(type="superadmin") | ||||
|         d.users["007"]["rolist"].append(EmbeddedRole(type="oops")) | ||||
|         d.users["007"]["info"] = uinfo | ||||
|         delta = d._delta() | ||||
|         print delta | ||||
|         self.assertEqual(True, "users.007.roles.666" in delta[0]) | ||||
|         self.assertEqual(True, "users.007.rolist" in delta[0]) | ||||
|         self.assertEqual(True, "users.007.info" in delta[0]) | ||||
|         self.assertEqual('superadmin', delta[0]["users.007.roles.666"]["type"]) | ||||
|         self.assertEqual('oops', delta[0]["users.007.rolist"][0]["type"]) | ||||
|         self.assertEqual(uinfo.id, delta[0]["users.007.info"]) | ||||
|  | ||||
| if __name__ == '__main__': | ||||
|     unittest.main() | ||||
|   | ||||
		Reference in New Issue
	
	Block a user