dereference instance not thread-safe
This commit is contained in:
parent
35f2781518
commit
80b3df8953
1
AUTHORS
1
AUTHORS
@ -172,3 +172,4 @@ that much better:
|
|||||||
* Alon Horev (https://github.com/alonho)
|
* Alon Horev (https://github.com/alonho)
|
||||||
* Kelvin Hammond (https://github.com/kelvinhammond)
|
* Kelvin Hammond (https://github.com/kelvinhammond)
|
||||||
* Jatin- (https://github.com/jatin-)
|
* Jatin- (https://github.com/jatin-)
|
||||||
|
* Thom Knowles (https://github.com/fleat)
|
||||||
|
@ -186,7 +186,6 @@ class ComplexBaseField(BaseField):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
field = None
|
field = None
|
||||||
__dereference = False
|
|
||||||
|
|
||||||
def __get__(self, instance, owner):
|
def __get__(self, instance, owner):
|
||||||
"""Descriptor to automatically dereference references.
|
"""Descriptor to automatically dereference references.
|
||||||
@ -201,9 +200,11 @@ class ComplexBaseField(BaseField):
|
|||||||
(self.field is None or isinstance(self.field,
|
(self.field is None or isinstance(self.field,
|
||||||
(GenericReferenceField, ReferenceField))))
|
(GenericReferenceField, ReferenceField))))
|
||||||
|
|
||||||
|
_dereference = _import_class("DeReference")()
|
||||||
|
|
||||||
self._auto_dereference = instance._fields[self.name]._auto_dereference
|
self._auto_dereference = instance._fields[self.name]._auto_dereference
|
||||||
if not self.__dereference and instance._initialised and dereference:
|
if instance._initialised and dereference:
|
||||||
instance._data[self.name] = self._dereference(
|
instance._data[self.name] = _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
|
||||||
)
|
)
|
||||||
@ -222,7 +223,7 @@ class ComplexBaseField(BaseField):
|
|||||||
if (self._auto_dereference and instance._initialised and
|
if (self._auto_dereference and instance._initialised and
|
||||||
isinstance(value, (BaseList, BaseDict))
|
isinstance(value, (BaseList, BaseDict))
|
||||||
and not value._dereferenced):
|
and not value._dereferenced):
|
||||||
value = self._dereference(
|
value = _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
|
||||||
@ -382,13 +383,6 @@ 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:
|
|
||||||
DeReference = _import_class("DeReference")
|
|
||||||
self.__dereference = DeReference() # Cached
|
|
||||||
return self.__dereference
|
|
||||||
|
|
||||||
|
|
||||||
class ObjectIdField(BaseField):
|
class ObjectIdField(BaseField):
|
||||||
"""A field wrapper around MongoDB's ObjectIds.
|
"""A field wrapper around MongoDB's ObjectIds.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user