From 1aa422fe8f056fd0000da45a67d875adc75cf034 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Langa?= Date: Thu, 28 Apr 2011 17:03:45 +0200 Subject: [PATCH] Closes #11324: ConfigParser(interpolation=None) doesn't work. Initial patches by Tobias Brink. Thanks! --- Lib/configparser.py | 9 +++++---- Lib/test/test_cfgparser.py | 38 ++++++++++++++++++++++++++++++++++++++ Misc/ACKS | 1 + 3 files changed, 44 insertions(+), 4 deletions(-) diff --git a/Lib/configparser.py b/Lib/configparser.py index 0ecff701adc..82b6f03061f 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 299f37a107d..a712b2b396e 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, diff --git a/Misc/ACKS b/Misc/ACKS index ac86ca2723f..c3f4e94ba93 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -113,6 +113,7 @@ Terrence Brannon Brian Brazil Dave Brennan Tom Bridgman +Tobias Brink Richard Brodie Michael Broghton Daniel Brotsky