summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Gaynor <alex.gaynor@gmail.com>2012-10-20 20:39:49 -0700
committerAlex Gaynor <alex.gaynor@gmail.com>2012-10-20 20:39:49 -0700
commit6b3d2bc9810153506620c7794a7a87ade29e3a97 (patch)
tree900b142afd4ce79b196057f6a069c9d18ce16d08
parent6b0d93df18a5c265f87ee6e64dbdffbdecfcea4f (diff)
parent2811e543c648a0669c88185a4d117eeb8ff09689 (diff)
Merge pull request #444 from mitar/patch-2
Allow reversed iteration over SortedDict.
-rw-r--r--django/utils/datastructures.py3
-rw-r--r--tests/regressiontests/utils/datastructures.py6
2 files changed, 9 insertions, 0 deletions
diff --git a/django/utils/datastructures.py b/django/utils/datastructures.py
index ad17573104..d94a05dfb4 100644
--- a/django/utils/datastructures.py
+++ b/django/utils/datastructures.py
@@ -160,6 +160,9 @@ class SortedDict(dict):
def __iter__(self):
return iter(self.keyOrder)
+ def __reversed__(self):
+ return reversed(self.keyOrder)
+
def pop(self, k, *args):
result = super(SortedDict, self).pop(k, *args)
try:
diff --git a/tests/regressiontests/utils/datastructures.py b/tests/regressiontests/utils/datastructures.py
index dbc65d37a8..7c81ccd172 100644
--- a/tests/regressiontests/utils/datastructures.py
+++ b/tests/regressiontests/utils/datastructures.py
@@ -128,6 +128,12 @@ class SortedDictTests(SimpleTestCase):
self.assertEqual(self.d1, {})
self.assertEqual(self.d1.keyOrder, [])
+ def test_reversed(self):
+ self.assertEqual(list(self.d1), [7, 1, 9])
+ self.assertEqual(list(self.d2), [1, 9, 0, 7])
+ self.assertEqual(list(reversed(self.d1)), [9, 1, 7])
+ self.assertEqual(list(reversed(self.d2)), [7, 0, 9, 1])
+
def test_insert(self):
d = SortedDict()
with warnings.catch_warnings(record=True) as w: