diff options
-rw-r--r-- | configobj.py | 25 | ||||
-rw-r--r-- | docs/configobj.txt | 11 | ||||
-rw-r--r-- | functionaltests/test_configobj.py | 9 |
3 files changed, 31 insertions, 14 deletions
diff --git a/configobj.py b/configobj.py index 6dcb554..7015c16 100644 --- a/configobj.py +++ b/configobj.py @@ -83,7 +83,7 @@ tdquot = "'''%s'''" # Sentinel for use in getattr calls to replace hasattr MISSING = object() -__version__ = '4.7.1' +__version__ = '4.7.2' try: any @@ -665,22 +665,19 @@ class Section(dict): self[entry] = indict[entry] - def pop(self, key, *args): + def pop(self, key, default=MISSING): """ 'D.pop(k[,d]) -> v, remove specified key and return the corresponding value. If key is not found, d is returned if given, otherwise KeyError is raised' """ - val = dict.pop(self, key, *args) - if key in self.scalars: - del self.comments[key] - del self.inline_comments[key] - self.scalars.remove(key) - elif key in self.sections: - del self.comments[key] - del self.inline_comments[key] - self.sections.remove(key) - if self.main.interpolation and isinstance(val, basestring): - return self._interpolate(key, val) + try: + val = self[key] + except KeyError: + if default is MISSING: + raise + val = default + else: + del self[key] return val @@ -2445,7 +2442,7 @@ def get_extra_values(conf, _prepend=()): """ out = [] - out.extend((_prepend, name) for name in conf.extra_values) + out.extend([(_prepend, name) for name in conf.extra_values]) for name in conf.sections: if name not in conf.extra_values: out.extend(get_extra_values(conf[name], _prepend + (name,))) diff --git a/docs/configobj.txt b/docs/configobj.txt index 4801f62..d4561a8 100644 --- a/docs/configobj.txt +++ b/docs/configobj.txt @@ -2388,6 +2388,17 @@ CHANGELOG This is an abbreviated changelog showing the major releases up to version 4. From version 4 it lists all releases and changes. + +2010/02/27 - Version 4.7.2 +-------------------------- + +* BUGFIX: Restore Python 2.3 compatibility +* BUGFIX: Members that were lists were being returned as copies due to interpolation + introduced in 4.7. Lists are now only copies if interpolation changes a list + member. +* BUGFIX: ``pop`` now does interpolation in list values as well. + + 2010/02/06 - Version 4.7.1 -------------------------- diff --git a/functionaltests/test_configobj.py b/functionaltests/test_configobj.py index 73ecf25..53845e6 100644 --- a/functionaltests/test_configobj.py +++ b/functionaltests/test_configobj.py @@ -53,4 +53,13 @@ class TestConfigObj(unittest.TestCase): c['a'].append('%(b)s') c['b'] = 'bar' self.assertEqual(c.pop('a'), ['bar']) + + def test_with_default(self): + c = ConfigObj() + c['a'] = 3 + + self.assertEqual(c.pop('a'), 3) + self.assertEqual(c.pop('b', 3), 3) + self.assertRaises(KeyError, c.pop, 'c') + |