From 1d7ea71c0d3444d80fc4a1b689b7fcb5fd36f637 Mon Sep 17 00:00:00 2001 From: Ross Lawley Date: Wed, 29 Feb 2012 10:31:33 +0000 Subject: [PATCH] DeReference is now used in a thread safe manner No global / module instance is needed Fixes #399 --- mongoengine/base.py | 4 ++-- mongoengine/dereference.py | 2 -- mongoengine/document.py | 4 ++-- mongoengine/queryset.py | 8 ++++---- 4 files changed, 8 insertions(+), 10 deletions(-) diff --git a/mongoengine/base.py b/mongoengine/base.py index be60db91..aa79b40c 100644 --- a/mongoengine/base.py +++ b/mongoengine/base.py @@ -234,8 +234,8 @@ class ComplexBaseField(BaseField): return self if not self._dereference and instance._initialised: - from dereference import dereference - self._dereference = dereference # Cached + from dereference import DeReference + self._dereference = DeReference() # Cached instance._data[self.name] = self._dereference( instance._data.get(self.name), max_depth=1, instance=instance, name=self.name diff --git a/mongoengine/dereference.py b/mongoengine/dereference.py index a5ad9166..cb5079f5 100644 --- a/mongoengine/dereference.py +++ b/mongoengine/dereference.py @@ -186,5 +186,3 @@ class DeReference(object): return BaseDict(data, instance, name) depth += 1 return data - -dereference = DeReference() diff --git a/mongoengine/document.py b/mongoengine/document.py index 6d9d3148..5ef93e35 100644 --- a/mongoengine/document.py +++ b/mongoengine/document.py @@ -277,8 +277,8 @@ class Document(BaseDocument): .. versionadded:: 0.5 """ - from dereference import dereference - self._data = dereference(self._data, max_depth) + from dereference import DeReference + self._data = DeReference()(self._data, max_depth) return self def reload(self, max_depth=1): diff --git a/mongoengine/queryset.py b/mongoengine/queryset.py index 3e4d4740..0b73b87d 100644 --- a/mongoengine/queryset.py +++ b/mongoengine/queryset.py @@ -1095,8 +1095,8 @@ class QuerySet(object): .. versionadded:: 0.4 .. versionchanged:: 0.5 - Fixed handling references """ - from dereference import dereference - return dereference(self._cursor.distinct(field), 1) + from dereference import DeReference + return DeReference()(self._cursor.distinct(field), 1) def only(self, *fields): """Load only a subset of this document's fields. :: @@ -1747,10 +1747,10 @@ class QuerySet(object): .. versionadded:: 0.5 """ - from dereference import dereference + from dereference import DeReference # Make select related work the same for querysets max_depth += 1 - return dereference(self, max_depth=max_depth) + return DeReference()(self, max_depth=max_depth) class QuerySetManager(object):