changeset 339:6811369cb912

Fix iterkeys/iteritems/itervalues/pop/popitem methods on the `odict` utility class. Thanks to Armin Ronacher for the patch.
author cmlenz
date Wed, 11 Jun 2008 22:12:09 +0000
parents 398e7c377165
children 292c639506a3
files babel/messages/catalog.py babel/util.py
diffstat 2 files changed, 19 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/babel/messages/catalog.py
+++ b/babel/messages/catalog.py
@@ -667,7 +667,7 @@
                 else:
                     message.previous_id = list(oldmsg.id)
             else:
-                oldmsg = remaining.pop(oldkey)
+                oldmsg = remaining.pop(oldkey, None)
             message.string = oldmsg.string
             if isinstance(message.id, (list, tuple)):
                 if not isinstance(message.string, (list, tuple)):
--- a/babel/util.py
+++ b/babel/util.py
@@ -23,6 +23,8 @@
     from sets import Set as set
 import textwrap
 import time
+from itertools import izip, imap
+missing = object()
 
 __all__ = ['distinct', 'pathmatch', 'relpath', 'wraptext', 'odict', 'UTC',
            'LOCALTZ']
@@ -193,6 +195,7 @@
 
     def __iter__(self):
         return iter(self._keys)
+    iterkeys = __iter__
 
     def clear(self):
         dict.clear(self)
@@ -206,14 +209,23 @@
     def items(self):
         return zip(self._keys, self.values())
 
+    def iteritems(self):
+        return izip(self._keys, self.itervalues())
+
     def keys(self):
         return self._keys[:]
 
-    def pop(self, key, default=None):
-        if key not in self:
+    def pop(self, key, default=missing):
+        if default is missing:
+            return dict.pop(self, key)
+        elif key not in self:
             return default
         self._keys.remove(key)
-        return dict.pop(self, key)
+        return dict.pop(self, key, default)
+
+    def popitem(self, key):
+        self._keys.remove(key)
+        return dict.popitem(key)
 
     def setdefault(self, key, failobj = None):
         dict.setdefault(self, key, failobj)
@@ -227,6 +239,9 @@
     def values(self):
         return map(self.get, self._keys)
 
+    def itervalues(self):
+        return imap(self.get, self._keys)
+
 
 try:
     relpath = os.path.relpath
Copyright (C) 2012-2017 Edgewall Software