]> granicus.if.org Git - python/commitdiff
Issue #20729: Restored the use of lazy iterkeys()/itervalues()/iteritems()
authorSerhiy Storchaka <storchaka@gmail.com>
Wed, 13 Aug 2014 06:35:21 +0000 (09:35 +0300)
committerSerhiy Storchaka <storchaka@gmail.com>
Wed, 13 Aug 2014 06:35:21 +0000 (09:35 +0300)
in the mailbox module.  This is partial rollback of changeset f340cb045bf9.

Lib/mailbox.py
Lib/test/test_mailbox.py
Misc/NEWS

index 8a25a19efce91f765af346e567f8aa3ab82e9c8a..451f8821fbb5fd07a9b8956c8b5476d29bbdf8b1 100644 (file)
@@ -103,7 +103,7 @@ class Mailbox:
 
     def itervalues(self):
         """Return an iterator over all messages."""
-        for key in self.keys():
+        for key in self.iterkeys():
             try:
                 value = self[key]
             except KeyError:
@@ -119,7 +119,7 @@ class Mailbox:
 
     def iteritems(self):
         """Return an iterator over (key, message) tuples."""
-        for key in self.keys():
+        for key in self.iterkeys():
             try:
                 value = self[key]
             except KeyError:
@@ -154,7 +154,7 @@ class Mailbox:
 
     def popitem(self):
         """Delete an arbitrary (key, message) pair and return it."""
-        for key in self.keys():
+        for key in self.iterkeys():
             return (key, self.pop(key))     # This is only run once.
         else:
             raise KeyError('No messages in mailbox')
@@ -162,7 +162,7 @@ class Mailbox:
     def update(self, arg=None):
         """Change the messages that correspond to certain keys."""
         if hasattr(arg, 'iteritems'):
-            source = arg.items()
+            source = arg.iteritems()
         elif hasattr(arg, 'items'):
             source = arg.items()
         else:
@@ -559,7 +559,7 @@ class Maildir(Mailbox):
     def next(self):
         """Return the next message in a one-time iteration."""
         if not hasattr(self, '_onetime_keys'):
-            self._onetime_keys = iter(self.keys())
+            self._onetime_keys = self.iterkeys()
         while True:
             try:
                 return self[next(self._onetime_keys)]
@@ -1078,7 +1078,7 @@ class MH(Mailbox):
 
     def __len__(self):
         """Return a count of messages in the mailbox."""
-        return len(list(self.keys()))
+        return len(list(self.iterkeys()))
 
     def lock(self):
         """Lock the mailbox."""
@@ -1192,7 +1192,7 @@ class MH(Mailbox):
         sequences = self.get_sequences()
         prev = 0
         changes = []
-        for key in self.keys():
+        for key in self.iterkeys():
             if key - 1 != prev:
                 changes.append((key, prev + 1))
                 if hasattr(os, 'link'):
index d40509368ac4e65c0b2ccda3f5e03c1171a07fd8..0991f74f84064e5de9e8e94906b09c083d798e8e 100644 (file)
@@ -300,7 +300,7 @@ class TestMailbox(TestBase):
 
     def test_iterkeys(self):
         # Get keys using iterkeys()
-        self._check_iteration(self._box.keys, do_keys=True, do_values=False)
+        self._check_iteration(self._box.iterkeys, do_keys=True, do_values=False)
 
     def test_keys(self):
         # Get keys using keys()
@@ -308,7 +308,7 @@ class TestMailbox(TestBase):
 
     def test_itervalues(self):
         # Get values using itervalues()
-        self._check_iteration(self._box.values, do_keys=False,
+        self._check_iteration(self._box.itervalues, do_keys=False,
                               do_values=True)
 
     def test_iter(self):
@@ -322,7 +322,7 @@ class TestMailbox(TestBase):
 
     def test_iteritems(self):
         # Get keys and values using iteritems()
-        self._check_iteration(self._box.items, do_keys=True,
+        self._check_iteration(self._box.iteritems, do_keys=True,
                               do_values=True)
 
     def test_items(self):
@@ -564,12 +564,12 @@ class TestMailboxSuperclass(TestBase, unittest.TestCase):
         self.assertRaises(NotImplementedError, lambda: box.__delitem__(''))
         self.assertRaises(NotImplementedError, lambda: box.discard(''))
         self.assertRaises(NotImplementedError, lambda: box.__setitem__('', ''))
+        self.assertRaises(NotImplementedError, lambda: box.iterkeys())
         self.assertRaises(NotImplementedError, lambda: box.keys())
-        self.assertRaises(NotImplementedError, lambda: box.keys())
-        self.assertRaises(NotImplementedError, lambda: box.values().__next__())
+        self.assertRaises(NotImplementedError, lambda: box.itervalues().__next__())
         self.assertRaises(NotImplementedError, lambda: box.__iter__().__next__())
         self.assertRaises(NotImplementedError, lambda: box.values())
-        self.assertRaises(NotImplementedError, lambda: box.items().next())
+        self.assertRaises(NotImplementedError, lambda: box.iteritems().__next__())
         self.assertRaises(NotImplementedError, lambda: box.items())
         self.assertRaises(NotImplementedError, lambda: box.get(''))
         self.assertRaises(NotImplementedError, lambda: box.__getitem__(''))
@@ -1020,7 +1020,7 @@ class _TestMboxMMDF(_TestSingleFile):
         mtime = os.path.getmtime(self._path)
         self._box = self._factory(self._path)
         self.assertEqual(len(self._box), 3)
-        for key in self._box.keys():
+        for key in self._box.iterkeys():
             self.assertIn(self._box.get_string(key), values)
         self._box.close()
         self.assertEqual(mtime, os.path.getmtime(self._path))
index 310a3b0b36e7192b64940316273583d857195461..18e5a6d1054adf0f8a1708709ea985c902adec61 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -27,6 +27,9 @@ Core and Builtins
 Library
 -------
 
+- Issue #20729: Restored the use of lazy iterkeys()/itervalues()/iteritems()
+  in the mailbox module.
+
 - Issue #21448: Changed FeedParser feed() to avoid O(N**2) behavior when
   parsing long line.  Original patch by Raymond Hettinger.