(self, DocClass, EmbeddedClass)
| 84 | self.delta_recursive(DynamicDocument, DynamicEmbeddedDocument) |
| 85 | |
| 86 | def delta_recursive(self, DocClass, EmbeddedClass): |
| 87 | class Embedded(EmbeddedClass): |
| 88 | id = StringField() |
| 89 | string_field = StringField() |
| 90 | int_field = IntField() |
| 91 | dict_field = DictField() |
| 92 | list_field = ListField() |
| 93 | |
| 94 | class Doc(DocClass): |
| 95 | string_field = StringField() |
| 96 | int_field = IntField() |
| 97 | dict_field = DictField() |
| 98 | list_field = ListField() |
| 99 | embedded_field = EmbeddedDocumentField(Embedded) |
| 100 | |
| 101 | Doc.drop_collection() |
| 102 | doc = Doc() |
| 103 | doc.save() |
| 104 | |
| 105 | doc = Doc.objects.first() |
| 106 | assert doc._get_changed_fields() == [] |
| 107 | assert doc._delta() == ({}, {}) |
| 108 | |
| 109 | embedded_1 = Embedded() |
| 110 | embedded_1.id = "010101" |
| 111 | embedded_1.string_field = "hello" |
| 112 | embedded_1.int_field = 1 |
| 113 | embedded_1.dict_field = {"hello": "world"} |
| 114 | embedded_1.list_field = ["1", 2, {"hello": "world"}] |
| 115 | doc.embedded_field = embedded_1 |
| 116 | |
| 117 | assert doc._get_changed_fields() == ["embedded_field"] |
| 118 | |
| 119 | embedded_delta = { |
| 120 | "id": "010101", |
| 121 | "string_field": "hello", |
| 122 | "int_field": 1, |
| 123 | "dict_field": {"hello": "world"}, |
| 124 | "list_field": ["1", 2, {"hello": "world"}], |
| 125 | } |
| 126 | assert doc.embedded_field._delta() == (embedded_delta, {}) |
| 127 | assert doc._delta() == ({"embedded_field": embedded_delta}, {}) |
| 128 | |
| 129 | doc.save() |
| 130 | doc = doc.reload(10) |
| 131 | |
| 132 | doc.embedded_field.dict_field = {} |
| 133 | assert doc._get_changed_fields() == ["embedded_field.dict_field"] |
| 134 | assert doc.embedded_field._delta() == ({}, {"dict_field": 1}) |
| 135 | assert doc._delta() == ({}, {"embedded_field.dict_field": 1}) |
| 136 | doc.save() |
| 137 | doc = doc.reload(10) |
| 138 | assert doc.embedded_field.dict_field == {} |
| 139 | |
| 140 | doc.embedded_field.list_field = [] |
| 141 | assert doc._get_changed_fields() == ["embedded_field.list_field"] |
| 142 | assert doc.embedded_field._delta() == ({}, {"list_field": 1}) |
| 143 | assert doc._delta() == ({}, {"embedded_field.list_field": 1}) |
no test coverage detected