summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMalcolm Tredinnick <malcolm.tredinnick@gmail.com>2008-08-25 04:00:15 +0000
committerMalcolm Tredinnick <malcolm.tredinnick@gmail.com>2008-08-25 04:00:15 +0000
commit62b39322f30fc274de033441d652a0c6714f93d7 (patch)
tree0450d85f91cdd022010d66d2a17d9aba67a2dd92
parentd62cfce213e9393407846477a1a599f847be8603 (diff)
Fixed #7496 -- It's now possible to pickle SortedDicts with pickle protocol 2
(used in caching). Thanks, John Huddleston. git-svn-id: http://code.djangoproject.com/svn/django/trunk@8531 bcc190cf-cafb-0310-a4f2-bffc1f526a37
-rw-r--r--AUTHORS1
-rw-r--r--django/utils/datastructures.py5
-rw-r--r--tests/regressiontests/datastructures/tests.py8
3 files changed, 12 insertions, 2 deletions
diff --git a/AUTHORS b/AUTHORS
index c57f9eafe5..943274b19a 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -195,6 +195,7 @@ answer newbie questions, and generally made Django that much better:
Sung-Jin Hong <serialx.net@gmail.com>
Richard House <Richard.House@i-logue.com>
Robert Rock Howard <http://djangomojo.com/>
+ John Huddleston <huddlej@wwu.edu>
Rob Hudson <http://rob.cogit8.org/>
Jason Huggins <http://www.jrandolph.com/blog/>
Hyun Mi Ae
diff --git a/django/utils/datastructures.py b/django/utils/datastructures.py
index 818731ba04..5837c3d236 100644
--- a/django/utils/datastructures.py
+++ b/django/utils/datastructures.py
@@ -54,6 +54,11 @@ class SortedDict(dict):
"""
A dictionary that keeps its keys in the order in which they're inserted.
"""
+ def __new__(cls, *args, **kwargs):
+ instance = super(SortedDict, cls).__new__(cls, *args, **kwargs)
+ instance.keyOrder = []
+ return instance
+
def __init__(self, data=None):
if data is None:
data = {}
diff --git a/tests/regressiontests/datastructures/tests.py b/tests/regressiontests/datastructures/tests.py
index f5d5b91d3d..9404a0a792 100644
--- a/tests/regressiontests/datastructures/tests.py
+++ b/tests/regressiontests/datastructures/tests.py
@@ -1,6 +1,7 @@
"""
# Tests for stuff in django.utils.datastructures.
+>>> import pickle
>>> from django.utils.datastructures import *
### MergeDict #################################################################
@@ -103,13 +104,16 @@ Init from sequence of tuples
>>> print repr(d)
{1: 'one', 0: 'zero', 2: 'two'}
+>>> pickle.loads(pickle.dumps(d, 2))
+{1: 'one', 0: 'zero', 2: 'two'}
+
>>> d.clear()
>>> d
{}
>>> d.keyOrder
[]
-### DotExpandedDict ############################################################
+### DotExpandedDict ##########################################################
>>> d = DotExpandedDict({'person.1.firstname': ['Simon'], 'person.1.lastname': ['Willison'], 'person.2.firstname': ['Adrian'], 'person.2.lastname': ['Holovaty']})
>>> d['person']['1']['lastname']
@@ -119,7 +123,7 @@ Init from sequence of tuples
>>> d['person']['2']['firstname']
['Adrian']
-### ImmutableList ################################################################
+### ImmutableList ############################################################
>>> d = ImmutableList(range(10))
>>> d.sort()
Traceback (most recent call last):