Commit 214f18e4 authored by Łukasz Langa's avatar Łukasz Langa Committed by GitHub

bpo-33802: Do not interpolate in ConfigParser while reading defaults (GH-7524)

This solves a regression in logging config due to changes in BPO-23835.
parent 66f02aa3
...@@ -1208,8 +1208,16 @@ class ConfigParser(RawConfigParser): ...@@ -1208,8 +1208,16 @@ class ConfigParser(RawConfigParser):
def _read_defaults(self, defaults): def _read_defaults(self, defaults):
"""Reads the defaults passed in the initializer, implicitly converting """Reads the defaults passed in the initializer, implicitly converting
values to strings like the rest of the API.""" values to strings like the rest of the API.
self.read_dict({self.default_section: defaults})
Does not perform interpolation for backwards compatibility.
"""
try:
hold_interpolation = self._interpolation
self._interpolation = Interpolation()
self.read_dict({self.default_section: defaults})
finally:
self._interpolation = hold_interpolation
class SafeConfigParser(ConfigParser): class SafeConfigParser(ConfigParser):
......
...@@ -1451,6 +1451,49 @@ class ConfigFileTest(BaseTest): ...@@ -1451,6 +1451,49 @@ class ConfigFileTest(BaseTest):
self.apply_config(self.disable_test, disable_existing_loggers=False) self.apply_config(self.disable_test, disable_existing_loggers=False)
self.assertFalse(logger.disabled) self.assertFalse(logger.disabled)
def test_defaults_do_no_interpolation(self):
"""bpo-33802 defaults should not get interpolated"""
ini = textwrap.dedent("""
[formatters]
keys=default
[formatter_default]
[handlers]
keys=console
[handler_console]
class=logging.StreamHandler
args=tuple()
[loggers]
keys=root
[logger_root]
formatter=default
handlers=console
""").strip()
fd, fn = tempfile.mkstemp(prefix='test_logging_', suffix='.ini')
try:
os.write(fd, ini.encode('ascii'))
os.close(fd)
logging.config.fileConfig(
fn,
defaults=dict(
version=1,
disable_existing_loggers=False,
formatters={
"generic": {
"format": "%(asctime)s [%(process)d] [%(levelname)s] %(message)s",
"datefmt": "[%Y-%m-%d %H:%M:%S %z]",
"class": "logging.Formatter"
},
},
)
)
finally:
os.unlink(fn)
class SocketHandlerTest(BaseTest): class SocketHandlerTest(BaseTest):
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment