summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorFred Drake <fdrake@acm.org>2004-05-18 02:25:51 (GMT)
committerFred Drake <fdrake@acm.org>2004-05-18 02:25:51 (GMT)
commitbc12b01d8349e185c8a52a0f2539e830dfae9adb (patch)
tree8ffc4bc7f6ba01fb3455d9062bc6447fa8e2ddb6 /Lib
parentbeddfcb6d0bb7149b8ce71e7dd26ca9f61fbd373 (diff)
downloadcpython-bc12b01d8349e185c8a52a0f2539e830dfae9adb.zip
cpython-bc12b01d8349e185c8a52a0f2539e830dfae9adb.tar.gz
cpython-bc12b01d8349e185c8a52a0f2539e830dfae9adb.tar.bz2
ConfigParser:
- ensure that option names in interpolations are handled by self.optionxform in the same way that other references to option names - add tests, documentation (closes SF bug #857881, patch #865455)
Diffstat (limited to 'Lib')
-rw-r--r--Lib/ConfigParser.py12
-rw-r--r--Lib/test/test_cfgparser.py8
2 files changed, 15 insertions, 5 deletions
diff --git a/Lib/ConfigParser.py b/Lib/ConfigParser.py
index d32eae0..73acdd1 100644
--- a/Lib/ConfigParser.py
+++ b/Lib/ConfigParser.py
@@ -555,6 +555,7 @@ class ConfigParser(RawConfigParser):
while depth: # Loop through this until it's done
depth -= 1
if "%(" in value:
+ value = self._KEYCRE.sub(self._interpolation_replace, value)
try:
value = value % vars
except KeyError, e:
@@ -566,6 +567,15 @@ class ConfigParser(RawConfigParser):
raise InterpolationDepthError(option, section, rawval)
return value
+ _KEYCRE = re.compile(r"%\(([^)]*)\)s|.")
+
+ def _interpolation_replace(self, match):
+ s = match.group(1)
+ if s is None:
+ return match.group()
+ else:
+ return "%%(%s)s" % self.optionxform(s)
+
class SafeConfigParser(ConfigParser):
@@ -598,7 +608,7 @@ class SafeConfigParser(ConfigParser):
if m is None:
raise InterpolationSyntaxError(option, section,
"bad interpolation variable reference %r" % rest)
- var = m.group(1)
+ var = self.optionxform(m.group(1))
rest = rest[m.end():]
try:
v = map[var]
diff --git a/Lib/test/test_cfgparser.py b/Lib/test/test_cfgparser.py
index b1b495e..28063b5 100644
--- a/Lib/test/test_cfgparser.py
+++ b/Lib/test/test_cfgparser.py
@@ -222,11 +222,11 @@ class TestCaseBase(unittest.TestCase):
"with11=%(with10)s\n"
"with10=%(with9)s\n"
"with9=%(with8)s\n"
- "with8=%(with7)s\n"
- "with7=%(with6)s\n"
+ "with8=%(With7)s\n"
+ "with7=%(WITH6)s\n"
"with6=%(with5)s\n"
- "with5=%(with4)s\n"
- "with4=%(with3)s\n"
+ "With5=%(with4)s\n"
+ "WITH4=%(with3)s\n"
"with3=%(with2)s\n"
"with2=%(with1)s\n"
"with1=with\n"