summaryrefslogtreecommitdiff
path: root/Lib
diff options
context:
space:
mode:
authorƁukasz Langa <lukasz@langa.pl>2018-06-08 04:02:48 -0700
committerGitHub <noreply@github.com>2018-06-08 04:02:48 -0700
commit214f18e49feb6a9d6c05aa09a4bb304905e81334 (patch)
treee39653d73ef272826e492d4af2da4261e6ce6dea /Lib
parent66f02aa32f1e4adb9f24cf186f8c495399d5ce9b (diff)
downloadcpython-git-214f18e49feb6a9d6c05aa09a4bb304905e81334.tar.gz
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.
Diffstat (limited to 'Lib')
-rw-r--r--Lib/configparser.py12
-rw-r--r--Lib/test/test_logging.py43
2 files changed, 53 insertions, 2 deletions
diff --git a/Lib/configparser.py b/Lib/configparser.py
index c88605feff..ea788aec51 100644
--- a/Lib/configparser.py
+++ b/Lib/configparser.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):
diff --git a/Lib/test/test_logging.py b/Lib/test/test_logging.py
index 5098866237..ba70b117d1 100644
--- a/Lib/test/test_logging.py
+++ b/Lib/test/test_logging.py
@@ -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):