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