gh-130941: Fix configparser
parsing values with allow_no_value
and interpolation
set (GH-130949)
This commit is contained in:
parent
8b7cb947c5
commit
c35c7353eb
@ -541,6 +541,8 @@ class ExtendedInterpolation(Interpolation):
|
||||
except (KeyError, NoSectionError, NoOptionError):
|
||||
raise InterpolationMissingOptionError(
|
||||
option, section, rawval, ":".join(path)) from None
|
||||
if v is None:
|
||||
continue
|
||||
if "$" in v:
|
||||
self._interpolate_some(parser, opt, accum, v, sect,
|
||||
dict(parser.items(sect, raw=True)),
|
||||
|
@ -1328,6 +1328,47 @@ class ConfigParserTestCaseNoValue(ConfigParserTestCase):
|
||||
allow_no_value = True
|
||||
|
||||
|
||||
class NoValueAndExtendedInterpolation(CfgParserTestCaseClass):
|
||||
interpolation = configparser.ExtendedInterpolation()
|
||||
allow_no_value = True
|
||||
|
||||
def test_interpolation_with_allow_no_value(self):
|
||||
config = textwrap.dedent("""
|
||||
[dummy]
|
||||
a
|
||||
b = ${a}
|
||||
""")
|
||||
cf = self.fromstring(config)
|
||||
|
||||
self.assertIs(cf["dummy"]["a"], None)
|
||||
self.assertEqual(cf["dummy"]["b"], "")
|
||||
|
||||
def test_explicit_none(self):
|
||||
config = textwrap.dedent("""
|
||||
[dummy]
|
||||
a = None
|
||||
b = ${a}
|
||||
""")
|
||||
cf = self.fromstring(config)
|
||||
|
||||
self.assertEqual(cf["dummy"]["a"], "None")
|
||||
self.assertEqual(cf["dummy"]["b"], "None")
|
||||
|
||||
|
||||
class ConfigParserNoValueAndExtendedInterpolationTest(
|
||||
NoValueAndExtendedInterpolation,
|
||||
unittest.TestCase,
|
||||
):
|
||||
config_class = configparser.ConfigParser
|
||||
|
||||
|
||||
class RawConfigParserNoValueAndExtendedInterpolationTest(
|
||||
NoValueAndExtendedInterpolation,
|
||||
unittest.TestCase,
|
||||
):
|
||||
config_class = configparser.RawConfigParser
|
||||
|
||||
|
||||
class ConfigParserTestCaseTrickyFile(CfgParserTestCaseClass, unittest.TestCase):
|
||||
config_class = configparser.ConfigParser
|
||||
delimiters = {'='}
|
||||
|
@ -0,0 +1,2 @@
|
||||
Fix :class:`configparser.ConfigParser` parsing empty interpolation with
|
||||
``allow_no_value`` set to ``True``.
|
Loading…
x
Reference in New Issue
Block a user