summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfuzzyman <devnull@localhost>2010-02-27 18:21:19 +0000
committerfuzzyman <devnull@localhost>2010-02-27 18:21:19 +0000
commita1a9c089da21fa3cd511ebfef316aa70f44b1c08 (patch)
treed5c0019e387da90ac24f667274dcd2088b03b476
parent1c026e33f66be248ae380d7f7501e0216d5fb9d3 (diff)
downloadconfigobj-a1a9c089da21fa3cd511ebfef316aa70f44b1c08.tar.gz
Fix for 2.3 compatibility and version number bump.
-rw-r--r--configobj.py25
-rw-r--r--docs/configobj.txt11
-rw-r--r--functionaltests/test_configobj.py9
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')
+