summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMalcolm Tredinnick <malcolm.tredinnick@gmail.com>2008-02-03 02:02:41 +0000
committerMalcolm Tredinnick <malcolm.tredinnick@gmail.com>2008-02-03 02:02:41 +0000
commit2542b94fb214847af0a4e1eca84558debbf32ee2 (patch)
tree468947f006dcb4bb44d5a23b1c85e2308dab79c1
parentf467c8cbc133bd4300961226ccced499fb8a485e (diff)
Fixed #6465 -- Tweaked MergeDict.getlist() to work with Django's MultiValueDict class. Thanks, Matt McClanahan.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@7062 bcc190cf-cafb-0310-a4f2-bffc1f526a37
-rw-r--r--django/utils/datastructures.py9
-rw-r--r--tests/regressiontests/datastructures/tests.py13
2 files changed, 18 insertions, 4 deletions
diff --git a/django/utils/datastructures.py b/django/utils/datastructures.py
index 25e9421575..82d914000f 100644
--- a/django/utils/datastructures.py
+++ b/django/utils/datastructures.py
@@ -2,6 +2,9 @@ class MergeDict(object):
"""
A simple class for creating new "virtual" dictionaries that actually look
up values in more than one dictionary, passed in the constructor.
+
+ If a key appears in more than one of the passed in dictionaries, only the
+ first occurrence will be used.
"""
def __init__(self, *dicts):
self.dicts = dicts
@@ -25,11 +28,9 @@ class MergeDict(object):
def getlist(self, key):
for dict_ in self.dicts:
- try:
+ if key in dict_.keys():
return dict_.getlist(key)
- except KeyError:
- pass
- raise KeyError
+ return []
def items(self):
item_list = []
diff --git a/tests/regressiontests/datastructures/tests.py b/tests/regressiontests/datastructures/tests.py
index 3b0ccde257..b5dc5d171b 100644
--- a/tests/regressiontests/datastructures/tests.py
+++ b/tests/regressiontests/datastructures/tests.py
@@ -20,6 +20,19 @@
>>> md2['chris']
'cool'
+MergeDict can merge MultiValueDicts
+>>> multi1 = MultiValueDict({'key1': ['value1'], 'key2': ['value2', 'value3']})
+>>> multi2 = MultiValueDict({'key2': ['value4'], 'key4': ['value5', 'value6']})
+>>> mm = MergeDict(multi1, multi2)
+
+# Although 'key2' appears in both dictionaries, only the first value is used.
+>>> mm.getlist('key2')
+['value2', 'value3']
+>>> mm.getlist('key4')
+['value5', 'value6']
+>>> mm.getlist('undefined')
+[]
+
### MultiValueDict ##########################################################
>>> d = MultiValueDict({'name': ['Adrian', 'Simon'], 'position': ['Developer']})