More updates
This commit is contained in:
		| @@ -264,7 +264,7 @@ class ComplexBaseField(BaseField): | |||||||
|     """ |     """ | ||||||
|  |  | ||||||
|     field = None |     field = None | ||||||
|     _dereference = False |     __dereference = False | ||||||
|  |  | ||||||
|     def __get__(self, instance, owner): |     def __get__(self, instance, owner): | ||||||
|         """Descriptor to automatically dereference references. |         """Descriptor to automatically dereference references. | ||||||
| @@ -276,8 +276,6 @@ class ComplexBaseField(BaseField): | |||||||
|         dereference = self.field is None or isinstance(self.field, |         dereference = self.field is None or isinstance(self.field, | ||||||
|             (GenericReferenceField, ReferenceField)) |             (GenericReferenceField, ReferenceField)) | ||||||
|         if not self._dereference and instance._initialised and dereference: |         if not self._dereference and instance._initialised and dereference: | ||||||
|             from dereference import DeReference |  | ||||||
|             self._dereference = DeReference()  # Cached |  | ||||||
|             instance._data[self.name] = self._dereference( |             instance._data[self.name] = self._dereference( | ||||||
|                 instance._data.get(self.name), max_depth=1, instance=instance, |                 instance._data.get(self.name), max_depth=1, instance=instance, | ||||||
|                 name=self.name |                 name=self.name | ||||||
| @@ -293,14 +291,13 @@ class ComplexBaseField(BaseField): | |||||||
|             value = BaseDict(value, instance, self.name) |             value = BaseDict(value, instance, self.name) | ||||||
|             instance._data[self.name] = value |             instance._data[self.name] = value | ||||||
|  |  | ||||||
|         if self._dereference and instance._initialised and \ |         if (instance._initialised and isinstance(value, (BaseList, BaseDict)) | ||||||
|             isinstance(value, (BaseList, BaseDict)) and not value._dereferenced: |             and not value._dereferenced): | ||||||
|             value = self._dereference( |             value = self._dereference( | ||||||
|                 value, max_depth=1, instance=instance, name=self.name |                 value, max_depth=1, instance=instance, name=self.name | ||||||
|             ) |             ) | ||||||
|             value._dereferenced = True |             value._dereferenced = True | ||||||
|             instance._data[self.name] = value |             instance._data[self.name] = value | ||||||
|  |  | ||||||
|         return value |         return value | ||||||
|  |  | ||||||
|     def __set__(self, instance, value): |     def __set__(self, instance, value): | ||||||
| @@ -441,6 +438,13 @@ class ComplexBaseField(BaseField): | |||||||
|  |  | ||||||
|     owner_document = property(_get_owner_document, _set_owner_document) |     owner_document = property(_get_owner_document, _set_owner_document) | ||||||
|  |  | ||||||
|  |     @property | ||||||
|  |     def _dereference(self,): | ||||||
|  |         if not self.__dereference: | ||||||
|  |             from dereference import DeReference | ||||||
|  |             self.__dereference = DeReference()  # Cached | ||||||
|  |         return self.__dereference | ||||||
|  |  | ||||||
|  |  | ||||||
| class ObjectIdField(BaseField): | class ObjectIdField(BaseField): | ||||||
|     """An field wrapper around MongoDB's ObjectIds. |     """An field wrapper around MongoDB's ObjectIds. | ||||||
| @@ -493,8 +497,9 @@ class DocumentMetaclass(type): | |||||||
|                 attrs.update(_get_mixin_fields(p_base)) |                 attrs.update(_get_mixin_fields(p_base)) | ||||||
|             return attrs |             return attrs | ||||||
|  |  | ||||||
|         metaclass = attrs.get('__metaclass__') |  | ||||||
|         super_new = super(DocumentMetaclass, cls).__new__ |         super_new = super(DocumentMetaclass, cls).__new__ | ||||||
|  |  | ||||||
|  |         metaclass = attrs.get('__metaclass__') | ||||||
|         if metaclass and issubclass(metaclass, DocumentMetaclass): |         if metaclass and issubclass(metaclass, DocumentMetaclass): | ||||||
|             return super_new(cls, name, bases, attrs) |             return super_new(cls, name, bases, attrs) | ||||||
|  |  | ||||||
| @@ -566,7 +571,8 @@ class DocumentMetaclass(type): | |||||||
|         attrs['_superclasses'] = superclasses |         attrs['_superclasses'] = superclasses | ||||||
|  |  | ||||||
|         if 'Document' not in _module_registry: |         if 'Document' not in _module_registry: | ||||||
|             from mongoengine import Document, EmbeddedDocument, DictField |             from mongoengine.document import Document, EmbeddedDocument | ||||||
|  |             from mongoengine.fields import DictField | ||||||
|             _module_registry['Document'] = Document |             _module_registry['Document'] = Document | ||||||
|             _module_registry['EmbeddedDocument'] = EmbeddedDocument |             _module_registry['EmbeddedDocument'] = EmbeddedDocument | ||||||
|             _module_registry['DictField'] = DictField |             _module_registry['DictField'] = DictField | ||||||
|   | |||||||
| @@ -329,6 +329,7 @@ class QuerySet(object): | |||||||
|     """ |     """ | ||||||
|  |  | ||||||
|     __already_indexed = set() |     __already_indexed = set() | ||||||
|  |     __dereference = False | ||||||
|  |  | ||||||
|     def __init__(self, document, collection): |     def __init__(self, document, collection): | ||||||
|         self._document = document |         self._document = document | ||||||
| @@ -600,7 +601,6 @@ class QuerySet(object): | |||||||
|  |  | ||||||
|             if self._hint != -1: |             if self._hint != -1: | ||||||
|                 self._cursor_obj.hint(self._hint) |                 self._cursor_obj.hint(self._hint) | ||||||
|  |  | ||||||
|         return self._cursor_obj |         return self._cursor_obj | ||||||
|  |  | ||||||
|     @classmethod |     @classmethod | ||||||
| @@ -1153,8 +1153,7 @@ class QuerySet(object): | |||||||
|         .. versionadded:: 0.4 |         .. versionadded:: 0.4 | ||||||
|         .. versionchanged:: 0.5 - Fixed handling references |         .. versionchanged:: 0.5 - Fixed handling references | ||||||
|         """ |         """ | ||||||
|         from dereference import DeReference |         return self._dereference(self._cursor.distinct(field), 1) | ||||||
|         return DeReference()(self._cursor.distinct(field), 1) |  | ||||||
|  |  | ||||||
|     def only(self, *fields): |     def only(self, *fields): | ||||||
|         """Load only a subset of this document's fields. :: |         """Load only a subset of this document's fields. :: | ||||||
| @@ -1854,10 +1853,16 @@ class QuerySet(object): | |||||||
|  |  | ||||||
|         .. versionadded:: 0.5 |         .. versionadded:: 0.5 | ||||||
|         """ |         """ | ||||||
|         from dereference import DeReference |  | ||||||
|         # Make select related work the same for querysets |         # Make select related work the same for querysets | ||||||
|         max_depth += 1 |         max_depth += 1 | ||||||
|         return DeReference()(self, max_depth=max_depth) |         return self._dereference(self, max_depth=max_depth) | ||||||
|  |  | ||||||
|  |     @property | ||||||
|  |     def _dereference(self): | ||||||
|  |         if not self.__dereference: | ||||||
|  |             from dereference import DeReference | ||||||
|  |             self.__dereference = DeReference()  # Cached | ||||||
|  |         return self.__dereference | ||||||
|  |  | ||||||
|  |  | ||||||
| class QuerySetManager(object): | class QuerySetManager(object): | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user