@@ -69,21 +69,29 @@ def _find_references(self, items, depth=0):
69
69
for field_name , field in item ._fields .iteritems ():
70
70
v = item ._data .get (field_name , None )
71
71
if isinstance (v , (DBRef )):
72
- reference_map .setdefault (field .document_type , []).append (v .id )
72
+ reference_map .setdefault (field .document_type , []) \
73
+ .append (v .id )
73
74
elif isinstance (v , (dict , SON )) and '_ref' in v :
74
- reference_map .setdefault (get_document (v ['_cls' ]), []).append (v ['_ref' ].id )
75
- elif isinstance (v , (dict , list , tuple )) and depth <= self .max_depth :
76
- field_cls = getattr (getattr (field , 'field' , None ), 'document_type' , None )
75
+ reference_map .setdefault (get_document (v ['_cls' ]), []) \
76
+ .append (v ['_ref' ].id )
77
+ elif isinstance (v , (dict , list , tuple )) and \
78
+ depth <= self .max_depth :
79
+ field_cls = getattr (getattr (field , 'field' , None ),
80
+ 'document_type' , None )
77
81
references = self ._find_references (v , depth )
78
82
for key , refs in references .iteritems ():
79
- if isinstance (field_cls , (Document , TopLevelDocumentMetaclass )):
83
+ if isinstance (
84
+ field_cls ,
85
+ (Document , TopLevelDocumentMetaclass )):
80
86
key = field_cls
81
87
reference_map .setdefault (key , []).extend (refs )
82
88
elif isinstance (item , (DBRef )):
83
89
reference_map .setdefault (item .collection , []).append (item .id )
84
90
elif isinstance (item , (dict , SON )) and '_ref' in item :
85
- reference_map .setdefault (get_document (item ['_cls' ]), []).append (item ['_ref' ].id )
86
- elif isinstance (item , (dict , list , tuple )) and depth - 1 <= self .max_depth :
91
+ reference_map .setdefault (get_document (item ['_cls' ]), []) \
92
+ .append (item ['_ref' ].id )
93
+ elif isinstance (item , (dict , list , tuple )) and \
94
+ depth - 1 <= self .max_depth :
87
95
references = self ._find_references (item , depth - 1 )
88
96
for key , refs in references .iteritems ():
89
97
reference_map .setdefault (key , []).extend (refs )
@@ -96,14 +104,17 @@ def _fetch_objects(self, doc_type=None):
96
104
object_map = {}
97
105
for col , dbrefs in self .reference_map .iteritems ():
98
106
keys = object_map .keys ()
99
- refs = list (set ([dbref for dbref in dbrefs if str (dbref ) not in keys ]))
107
+ refs = list (set (
108
+ [dbref for dbref in dbrefs if str (dbref ) not in keys ]))
100
109
if hasattr (col , 'objects' ): # We have a document class for the refs
101
110
references = col .objects .in_bulk (refs )
102
111
for key , doc in references .iteritems ():
103
112
object_map [key ] = doc
104
113
else : # Generic reference: use the refs data to convert to document
105
- if doc_type and not isinstance (doc_type , (ListField , DictField , MapField ,) ):
106
- references = doc_type ._get_db ()[col ].find ({'_id' : {'$in' : refs }})
114
+ if doc_type and \
115
+ not isinstance (doc_type , (ListField , DictField , MapField ,)): # noqa
116
+ references = doc_type ._get_db ()[col ].find (
117
+ {'_id' : {'$in' : refs }})
107
118
for ref in references :
108
119
doc = doc_type ._from_son (ref )
109
120
object_map [doc .id ] = doc
@@ -170,13 +181,18 @@ def _attach_objects(self, items, depth=0, instance=None, name=None):
170
181
if isinstance (v , (DBRef )):
171
182
data [k ]._data [field_name ] = self .object_map .get (v .id , v )
172
183
elif isinstance (v , (dict , SON )) and '_ref' in v :
173
- data [k ]._data [field_name ] = self .object_map .get (v ['_ref' ].id , v )
184
+ data [k ]._data [field_name ] = \
185
+ self .object_map .get (v ['_ref' ].id , v )
174
186
elif isinstance (v , dict ) and depth <= self .max_depth :
175
- data [k ]._data [field_name ] = self ._attach_objects (v , depth , instance = instance , name = name )
176
- elif isinstance (v , (list , tuple )) and depth <= self .max_depth :
177
- data [k ]._data [field_name ] = self ._attach_objects (v , depth , instance = instance , name = name )
187
+ data [k ]._data [field_name ] = self ._attach_objects (
188
+ v , depth , instance = instance , name = name )
189
+ elif isinstance (v , (list , tuple )) and \
190
+ depth <= self .max_depth :
191
+ data [k ]._data [field_name ] = self ._attach_objects (
192
+ v , depth , instance = instance , name = name )
178
193
elif isinstance (v , (dict , list , tuple )) and depth <= self .max_depth :
179
- data [k ] = self ._attach_objects (v , depth - 1 , instance = instance , name = name )
194
+ data [k ] = self ._attach_objects (
195
+ v , depth - 1 , instance = instance , name = name )
180
196
elif hasattr (v , 'id' ):
181
197
data [k ] = self .object_map .get (v .id , v )
182
198
0 commit comments