MCPcopy Index your code
hub / github.com/MongoEngine/mongoengine / _attach_objects

Method _attach_objects

mongoengine/dereference.py:209–295  ·  view source on GitHub ↗

Recursively finds all db references to be dereferenced :param items: The iterable (dict, list, queryset) :param depth: The current depth of recursion :param instance: The owning instance used for tracking changes by :class:`~mongoengine.base.ComplexBaseF

(self, items, depth=0, instance=None, name=None)

Source from the content-addressed store, hash-verified

207 return object_map
208
209 def _attach_objects(self, items, depth=0, instance=None, name=None):
210 """
211 Recursively finds all db references to be dereferenced
212
213 :param items: The iterable (dict, list, queryset)
214 :param depth: The current depth of recursion
215 :param instance: The owning instance used for tracking changes by
216 :class:`~mongoengine.base.ComplexBaseField`
217 :param name: The name of the field, used for tracking changes by
218 :class:`~mongoengine.base.ComplexBaseField`
219 """
220 if not items:
221 if isinstance(items, (BaseDict, BaseList)):
222 return items
223
224 if instance:
225 if isinstance(items, dict):
226 return BaseDict(items, instance, name)
227 else:
228 return BaseList(items, instance, name)
229
230 if isinstance(items, (dict, SON)):
231 if "_ref" in items:
232 return self.object_map.get(
233 (items["_ref"].collection, items["_ref"].id), items
234 )
235 elif "_cls" in items:
236 doc = get_document(items["_cls"])._from_son(items)
237 _cls = doc._data.pop("_cls", None)
238 del items["_cls"]
239 doc._data = self._attach_objects(doc._data, depth, doc, None)
240 if _cls is not None:
241 doc._data["_cls"] = _cls
242 return doc
243
244 if not hasattr(items, "items"):
245 is_list = True
246 list_type = BaseList
247 if isinstance(items, EmbeddedDocumentList):
248 list_type = EmbeddedDocumentList
249 as_tuple = isinstance(items, tuple)
250 iterator = enumerate(items)
251 data = []
252 else:
253 is_list = False
254 iterator = items.items()
255 data = {}
256
257 depth += 1
258 for k, v in iterator:
259 if is_list:
260 data.append(v)
261 else:
262 data[k] = v
263
264 if k in self.object_map and not is_list:
265 data[k] = self.object_map[k]
266 elif isinstance(v, (Document, EmbeddedDocument)):

Callers 1

__call__Method · 0.95

Calls 7

BaseDictClass · 0.90
BaseListClass · 0.90
get_documentFunction · 0.90
_from_sonMethod · 0.80
popMethod · 0.80
itemsMethod · 0.80
getMethod · 0.45

Tested by

no test coverage detected