summaryrefslogtreecommitdiff
path: root/django/http
diff options
context:
space:
mode:
authorMalcolm Tredinnick <malcolm.tredinnick@gmail.com>2008-08-21 13:55:21 +0000
committerMalcolm Tredinnick <malcolm.tredinnick@gmail.com>2008-08-21 13:55:21 +0000
commitf2477b6450afb99b5c34c54cfd121ddfbabc904e (patch)
tree12a4bab575d1499b5a72d0b0b78225fef83877f9 /django/http
parentc8c159cbbad71deb4d13d6b4e10d4f38817ebdc4 (diff)
Fixed #7233 -- Ensured that QueryDict classes are always unpicklable. This
problem only arose on some systems, since it depends upon the order in which the attributes are pickled. Makes reliable testing kind of tricky. git-svn-id: http://code.djangoproject.com/svn/django/trunk@8460 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'django/http')
-rw-r--r--django/http/__init__.py19
1 files changed, 18 insertions, 1 deletions
diff --git a/django/http/__init__.py b/django/http/__init__.py
index 0124022478..bbbd1ba99a 100644
--- a/django/http/__init__.py
+++ b/django/http/__init__.py
@@ -128,6 +128,11 @@ class QueryDict(MultiValueDict):
Values retrieved from this class are converted from the given encoding
(DEFAULT_CHARSET by default) to unicode.
"""
+ # These are both reset in __init__, but is specified here at the class
+ # level so that unpickling will have valid values
+ _mutable = True
+ _encoding = None
+
def __init__(self, query_string, mutable=False, encoding=None):
MultiValueDict.__init__(self)
if not encoding:
@@ -136,12 +141,24 @@ class QueryDict(MultiValueDict):
from django.conf import settings
encoding = settings.DEFAULT_CHARSET
self.encoding = encoding
- self._mutable = True
for key, value in parse_qsl((query_string or ''), True): # keep_blank_values=True
self.appendlist(force_unicode(key, encoding, errors='replace'),
force_unicode(value, encoding, errors='replace'))
self._mutable = mutable
+ def _get_encoding(self):
+ if self._encoding is None:
+ # *Important*: do not import settings at the module level because
+ # of the note in core.handlers.modpython.
+ from django.conf import settings
+ self._encoding = settings.DEFAULT_CHARSET
+ return self._encoding
+
+ def _set_encoding(self, value):
+ self._encoding = value
+
+ encoding = property(_get_encoding, _set_encoding)
+
def _assert_mutable(self):
if not self._mutable:
raise AttributeError("This QueryDict instance is immutable")