[1.1.X] Fixed #12476 -- Forced the rollout of generators passed to SortedDict so that the data source can be read twice. Thanks to gsf for the report, and Alex for the patch.
Backport of r12064 from trunk. git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.1.X@12065 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
618e1b1587
commit
e8b001f46f
@ -1,3 +1,5 @@
|
||||
from types import GeneratorType
|
||||
|
||||
from django.utils.copycompat import deepcopy
|
||||
|
||||
|
||||
@ -65,6 +67,11 @@ class SortedDict(dict):
|
||||
def __init__(self, data=None):
|
||||
if data is None:
|
||||
data = {}
|
||||
elif isinstance(data, GeneratorType):
|
||||
# Unfortunately we need to be able to read a generator twice. Once
|
||||
# to get the data into self with our super().__init__ call and a
|
||||
# second time to setup keyOrder correctly
|
||||
data = list(data)
|
||||
super(SortedDict, self).__init__(data)
|
||||
if isinstance(data, dict):
|
||||
self.keyOrder = data.keys()
|
||||
|
@ -60,9 +60,9 @@ MultiValueDictKeyError: "Key 'lastname' not found in <MultiValueDict: {'position
|
||||
>>> d.setlist('lastname', ['Holovaty', 'Willison'])
|
||||
>>> d.getlist('lastname')
|
||||
['Holovaty', 'Willison']
|
||||
>>> d.values()
|
||||
>>> d.values()
|
||||
['Developer', 'Simon', 'Willison']
|
||||
>>> list(d.itervalues())
|
||||
>>> list(d.itervalues())
|
||||
['Developer', 'Simon', 'Willison']
|
||||
|
||||
### SortedDict #################################################################
|
||||
@ -95,6 +95,9 @@ True
|
||||
>>> d.pop('one', 'missing')
|
||||
'missing'
|
||||
|
||||
>>> SortedDict((i, i) for i in xrange(3))
|
||||
{0: 0, 1: 1, 2: 2}
|
||||
|
||||
We don't know which item will be popped in popitem(), so we'll just check that
|
||||
the number of keys has decreased.
|
||||
>>> l = len(d)
|
||||
|
Loading…
x
Reference in New Issue
Block a user