Skip to content

Commit 744211b

Browse files
authored
Prevent Object and Nested mutating inner doc_class mapping
1 parent 46e8002 commit 744211b

File tree

2 files changed

+19
-1
lines changed

2 files changed

+19
-1
lines changed

elasticsearch_dsl/field.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import base64
2+
import copy
23
import ipaddress
34

45
try:
@@ -151,7 +152,7 @@ def __init__(self, doc_class=None, dynamic=None, properties=None, **kwargs):
151152
if dynamic is not None:
152153
self._doc_class._doc_type.mapping.meta('dynamic', dynamic)
153154

154-
self._mapping = self._doc_class._doc_type.mapping
155+
self._mapping = copy.deepcopy(self._doc_class._doc_type.mapping)
155156
super(Object, self).__init__(**kwargs)
156157

157158
def __getitem__(self, name):

test_elasticsearch_dsl/test_document.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -582,3 +582,20 @@ class Index:
582582
assert c.meta.fields._tags == ['search']
583583
assert c.meta.fields._routing == 'es'
584584
assert c._tagline == 'You know, for search'
585+
586+
def test_nested_and_object_inner_doc():
587+
class MySubDocWithNested(MyDoc):
588+
nested_inner = field.Nested(MyInner)
589+
590+
props = MySubDocWithNested._doc_type.mapping.to_dict()['properties']
591+
assert props == {
592+
"created_at": {"type": "date"},
593+
"inner": {"properties": {"old_field": {"type": "text"}}, "type": "object"},
594+
"name": {"type": "text"},
595+
"nested_inner": {
596+
"properties": {"old_field": {"type": "text"}},
597+
"type": "nested",
598+
},
599+
"title": {"type": "keyword"},
600+
}
601+

0 commit comments

Comments
 (0)