dereference instance not thread-safe

This commit is contained in:
Thom Knowles 2013-07-22 20:07:57 -04:00
parent 35f2781518
commit 80b3df8953
2 changed files with 6 additions and 11 deletions

View File

@ -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)

View File

@ -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.