diff options
author | Łukasz Langa <lukasz@langa.pl> | 2011-04-28 15:03:45 (GMT) |
---|---|---|
committer | Łukasz Langa <lukasz@langa.pl> | 2011-04-28 15:03:45 (GMT) |
commit | 1aa422fe8f056fd0000da45a67d875adc75cf034 (patch) | |
tree | c0682c6861b6630d6daa86a951852aee3d6e1c09 | |
parent | f53111339779011df6337a69fcd119644f0500b4 (diff) | |
download | cpython-1aa422fe8f056fd0000da45a67d875adc75cf034.zip cpython-1aa422fe8f056fd0000da45a67d875adc75cf034.tar.gz cpython-1aa422fe8f056fd0000da45a67d875adc75cf034.tar.bz2 |
Closes #11324: ConfigParser(interpolation=None) doesn't work.
Initial patches by Tobias Brink. Thanks!
-rw-r--r-- | Lib/configparser.py | 9 | ||||
-rw-r--r-- | Lib/test/test_cfgparser.py | 38 | ||||
-rw-r--r-- | Misc/ACKS | 1 |
3 files changed, 44 insertions, 4 deletions
diff --git a/Lib/configparser.py b/Lib/configparser.py index 0ecff70..82b6f03 100644 --- a/Lib/configparser.py +++ b/Lib/configparser.py @@ -623,11 +623,12 @@ class RawConfigParser(MutableMapping): self._strict = strict self._allow_no_value = allow_no_value self._empty_lines_in_values = empty_lines_in_values - if interpolation is _UNSET: - self._interpolation = self._DEFAULT_INTERPOLATION - else: - self._interpolation = interpolation self.default_section=default_section + self._interpolation = interpolation + if self._interpolation is _UNSET: + self._interpolation = self._DEFAULT_INTERPOLATION + if self._interpolation is None: + self._interpolation = Interpolation() def defaults(self): return self._defaults diff --git a/Lib/test/test_cfgparser.py b/Lib/test/test_cfgparser.py index 299f37a..a712b2b 100644 --- a/Lib/test/test_cfgparser.py +++ b/Lib/test/test_cfgparser.py @@ -864,6 +864,43 @@ class ConfigParserTestCase(BasicTestCase): cf = self.newconfig() self.assertRaises(ValueError, cf.add_section, self.default_section) + +class ConfigParserTestCaseNoInterpolation(BasicTestCase): + config_class = configparser.ConfigParser + interpolation = None + ini = textwrap.dedent(""" + [numbers] + one = 1 + two = %(one)s * 2 + three = ${common:one} * 3 + + [hexen] + sixteen = ${numbers:two} * 8 + """).strip() + + def assertMatchesIni(self, cf): + self.assertEqual(cf['numbers']['one'], '1') + self.assertEqual(cf['numbers']['two'], '%(one)s * 2') + self.assertEqual(cf['numbers']['three'], '${common:one} * 3') + self.assertEqual(cf['hexen']['sixteen'], '${numbers:two} * 8') + + def test_no_interpolation(self): + cf = self.fromstring(self.ini) + self.assertMatchesIni(cf) + + def test_empty_case(self): + cf = self.newconfig() + self.assertIsNone(cf.read_string("")) + + def test_none_as_default_interpolation(self): + class CustomConfigParser(configparser.ConfigParser): + _DEFAULT_INTERPOLATION = None + + cf = CustomConfigParser() + cf.read_string(self.ini) + self.assertMatchesIni(cf) + + class ConfigParserTestCaseLegacyInterpolation(ConfigParserTestCase): config_class = configparser.ConfigParser interpolation = configparser.LegacyInterpolation() @@ -1444,6 +1481,7 @@ def test_main(): ConfigParserTestCaseNoValue, ConfigParserTestCaseExtendedInterpolation, ConfigParserTestCaseLegacyInterpolation, + ConfigParserTestCaseNoInterpolation, ConfigParserTestCaseTrickyFile, MultilineValuesTestCase, RawConfigParserTestCase, @@ -113,6 +113,7 @@ Terrence Brannon Brian Brazil Dave Brennan Tom Bridgman +Tobias Brink Richard Brodie Michael Broghton Daniel Brotsky |