summaryrefslogtreecommitdiff
path: root/django/utils
diff options
context:
space:
mode:
authorJoseph Kocherhans <joseph@jkocherhans.com>2010-02-23 00:08:03 +0000
committerJoseph Kocherhans <joseph@jkocherhans.com>2010-02-23 00:08:03 +0000
commit16efc1a92e30e5f8a9ecc89edf0002db2425b3b4 (patch)
tree27f1d2f042771ef169c89acd47695018e47aae4d /django/utils
parentbd79677e2999b545c27be8b2696c7f176ad78001 (diff)
[1.1.X] Fixed #12820. Implemented other dict methods for MergeDict. Backport of [12498] from trunk.
git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.1.X@12501 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'django/utils')
-rw-r--r--django/utils/datastructures.py30
1 files changed, 26 insertions, 4 deletions
diff --git a/django/utils/datastructures.py b/django/utils/datastructures.py
index adcc3546d0..af06bbef53 100644
--- a/django/utils/datastructures.py
+++ b/django/utils/datastructures.py
@@ -37,11 +37,32 @@ class MergeDict(object):
return dict_.getlist(key)
return []
- def items(self):
- item_list = []
+ def iteritems(self):
+ seen = set()
for dict_ in self.dicts:
- item_list.extend(dict_.items())
- return item_list
+ for item in dict_.iteritems():
+ k, v = item
+ if k in seen:
+ continue
+ seen.add(k)
+ yield item
+
+ def iterkeys(self):
+ for k, v in self.iteritems():
+ yield k
+
+ def itervalues(self):
+ for k, v in self.iteritems():
+ yield v
+
+ def items(self):
+ return list(self.iteritems())
+
+ def keys(self):
+ return list(self.iterkeys())
+
+ def values(self):
+ return list(self.itervalues())
def has_key(self, key):
for dict_ in self.dicts:
@@ -50,6 +71,7 @@ class MergeDict(object):
return False
__contains__ = has_key
+ __iter__ = iterkeys
def copy(self):
"""Returns a copy of this object."""