From 8b6855fc2c833e0ac626718cd08cd08beb947899 Mon Sep 17 00:00:00 2001 From: Jason Kirtland Date: Thu, 10 Jul 2008 19:16:08 +0000 Subject: [PATCH] Added default support to OrderedDict.pop [ticket:585] --- lib/sqlalchemy/util.py | 8 +++++--- test/base/utils.py | 16 ++++++++++++++++ 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/lib/sqlalchemy/util.py b/lib/sqlalchemy/util.py index dea3207244..c9982a9fa0 100644 --- a/lib/sqlalchemy/util.py +++ b/lib/sqlalchemy/util.py @@ -759,9 +759,11 @@ class OrderedDict(dict): dict.__delitem__(self, key) self._list.remove(key) - def pop(self, key): - value = dict.pop(self, key) - self._list.remove(key) + def pop(self, key, *default): + present = key in self + value = dict.pop(self, key, *default) + if present: + self._list.remove(key) return value def popitem(self): diff --git a/test/base/utils.py b/test/base/utils.py index b23b563223..8b44de84e1 100644 --- a/test/base/utils.py +++ b/test/base/utils.py @@ -17,6 +17,22 @@ class OrderedDictTest(TestBase): eq_(o.values(), [1, 2, 'attack', 3]) o.pop('snack') + eq_(o.keys(), ['a', 'b', 'c']) + eq_(o.values(), [1, 2, 3]) + + try: + o.pop('eep') + assert False + except KeyError: + pass + + eq_(o.pop('eep', 'woot'), 'woot') + + try: + o.pop('whiff', 'bang', 'pow') + assert False + except TypeError: + pass eq_(o.keys(), ['a', 'b', 'c']) eq_(o.values(), [1, 2, 3]) -- 2.47.3