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) |  * 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. | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user