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
This commit is contained in:
Malcolm Tredinnick 2008-08-25 04:00:15 +00:00
parent d62cfce213
commit 62b39322f3
3 changed files with 12 additions and 2 deletions

View File

@ -195,6 +195,7 @@ answer newbie questions, and generally made Django that much better:
Sung-Jin Hong <serialx.net@gmail.com> Sung-Jin Hong <serialx.net@gmail.com>
Richard House <Richard.House@i-logue.com> Richard House <Richard.House@i-logue.com>
Robert Rock Howard <http://djangomojo.com/> Robert Rock Howard <http://djangomojo.com/>
John Huddleston <huddlej@wwu.edu>
Rob Hudson <http://rob.cogit8.org/> Rob Hudson <http://rob.cogit8.org/>
Jason Huggins <http://www.jrandolph.com/blog/> Jason Huggins <http://www.jrandolph.com/blog/>
Hyun Mi Ae Hyun Mi Ae

View File

@ -54,6 +54,11 @@ class SortedDict(dict):
""" """
A dictionary that keeps its keys in the order in which they're inserted. 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): def __init__(self, data=None):
if data is None: if data is None:
data = {} data = {}

View File

@ -1,6 +1,7 @@
""" """
# Tests for stuff in django.utils.datastructures. # Tests for stuff in django.utils.datastructures.
>>> import pickle
>>> from django.utils.datastructures import * >>> from django.utils.datastructures import *
### MergeDict ################################################################# ### MergeDict #################################################################
@ -103,13 +104,16 @@ Init from sequence of tuples
>>> print repr(d) >>> print repr(d)
{1: 'one', 0: 'zero', 2: 'two'} {1: 'one', 0: 'zero', 2: 'two'}
>>> pickle.loads(pickle.dumps(d, 2))
{1: 'one', 0: 'zero', 2: 'two'}
>>> d.clear() >>> d.clear()
>>> d >>> d
{} {}
>>> d.keyOrder >>> d.keyOrder
[] []
### DotExpandedDict ############################################################ ### DotExpandedDict ##########################################################
>>> d = DotExpandedDict({'person.1.firstname': ['Simon'], 'person.1.lastname': ['Willison'], 'person.2.firstname': ['Adrian'], 'person.2.lastname': ['Holovaty']}) >>> d = DotExpandedDict({'person.1.firstname': ['Simon'], 'person.1.lastname': ['Willison'], 'person.2.firstname': ['Adrian'], 'person.2.lastname': ['Holovaty']})
>>> d['person']['1']['lastname'] >>> d['person']['1']['lastname']
@ -119,7 +123,7 @@ Init from sequence of tuples
>>> d['person']['2']['firstname'] >>> d['person']['2']['firstname']
['Adrian'] ['Adrian']
### ImmutableList ################################################################ ### ImmutableList ############################################################
>>> d = ImmutableList(range(10)) >>> d = ImmutableList(range(10))
>>> d.sort() >>> d.sort()
Traceback (most recent call last): Traceback (most recent call last):