Browse Source
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.
pull/7532/head
Łukasz Langa
8 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with
53 additions and
2 deletions
-
Lib/configparser.py
-
Lib/test/test_logging.py
|
|
|
@ -1208,8 +1208,16 @@ class ConfigParser(RawConfigParser): |
|
|
|
|
|
|
|
def _read_defaults(self, defaults): |
|
|
|
"""Reads the defaults passed in the initializer, implicitly converting |
|
|
|
values to strings like the rest of the API.""" |
|
|
|
self.read_dict({self.default_section: defaults}) |
|
|
|
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}) |
|
|
|
finally: |
|
|
|
self._interpolation = hold_interpolation |
|
|
|
|
|
|
|
|
|
|
|
class SafeConfigParser(ConfigParser): |
|
|
|
|
|
|
|
@ -1451,6 +1451,49 @@ class ConfigFileTest(BaseTest): |
|
|
|
self.apply_config(self.disable_test, disable_existing_loggers=False) |
|
|
|
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): |
|
|
|
|
|
|
|
|