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.
This commit is contained in:
parent
66f02aa32f
commit
214f18e49f
|
@ -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.
|
||||||
|
|
||||||
|
Does not perform interpolation for backwards compatibility.
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
hold_interpolation = self._interpolation
|
||||||
|
self._interpolation = Interpolation()
|
||||||
self.read_dict({self.default_section: defaults})
|
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):
|
||||||
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):
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue