]> granicus.if.org Git - python/commitdiff
Issue #9626: Fix views in collections.OrderedDict().
authorRaymond Hettinger <python@rcn.com>
Tue, 17 Aug 2010 19:03:06 +0000 (19:03 +0000)
committerRaymond Hettinger <python@rcn.com>
Tue, 17 Aug 2010 19:03:06 +0000 (19:03 +0000)
Lib/collections.py
Lib/test/test_collections.py
Misc/NEWS

index 20cc6003bc5970d943a30421296b0886840e1157..10c8903697cb5d39d43d0ec3a25f1bd32333184c 100644 (file)
@@ -119,6 +119,18 @@ class OrderedDict(dict, MutableMapping):
     iteritems = MutableMapping.iteritems
     __ne__ = MutableMapping.__ne__
 
+    def viewkeys(self):
+        "od.viewkeys() -> a set-like object providing a view on od's keys"
+        return KeysView(self)
+
+    def viewvalues(self):
+        "od.viewvalues() -> an object providing a view on od's values"
+        return ValuesView(self)
+
+    def viewitems(self):
+        "od.viewitems() -> a set-like object providing a view on od's items"
+        return ItemsView(self)
+
     def popitem(self, last=True):
         '''od.popitem() -> (k, v), return and remove a (key, value) pair.
         Pairs are returned in LIFO order if last is true or FIFO order if false.
index a0f0fbc5563a0d3e186b02da217a83266be9355d..f10f956f9b91db3881e8aed0eb557af93dcd8d49 100644 (file)
@@ -933,6 +933,12 @@ class TestOrderedDict(unittest.TestCase):
         od['a'] = 1
         self.assertEqual(list(od.items()), [('b', 2), ('a', 1)])
 
+    def test_views(self):
+        s = 'the quick brown fox jumped over a lazy dog yesterday before dawn'.split()
+        od = OrderedDict.fromkeys(s)
+        self.assertEqual(list(od.viewkeys()),  s)
+        self.assertEqual(list(od.viewvalues()),  [None for k in s])
+        self.assertEqual(list(od.viewitems()),  [(k, None) for k in s])
 
 
 class GeneralMappingTests(mapping_tests.BasicTestMappingProtocol):
index 09f651af0d2851ac2624a5c845dbec425c88f042..e8b68e0bab93ae037d9b0d140adb4584a0826c11 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -29,6 +29,10 @@ Core and Builtins
 Library
 -------
 
+- Issue #9626: the view methods for collections.OrderedDict() were returning
+  the unordered versions inherited from dict.  Those methods are now
+  overridden to provide ordered views.
+
 - Issue #8688: MANIFEST files created by distutils now include a magic
   comment indicating they are generated.  Manually maintained MANIFESTs
   without this marker will not be overwritten or removed.