# HG changeset patch # User cmlenz # Date 1213222329 0 # Node ID 6811369cb912e7c29a8422cb07a55f7ea3b390e0 # Parent 398e7c3771654e67556f260c4bdc564bc17338d1 Fix iterkeys/iteritems/itervalues/pop/popitem methods on the `odict` utility class. Thanks to Armin Ronacher for the patch. diff --git a/babel/messages/catalog.py b/babel/messages/catalog.py --- 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)): diff --git a/babel/util.py b/babel/util.py --- 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