summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrian Faherty <anothergenericuser@gmail.com>2022-02-17 12:17:43 (GMT)
committerGitHub <noreply@github.com>2022-02-17 12:17:43 (GMT)
commitfc115c9bde52a58b4fb9be2b80c3d6be8a4d2454 (patch)
tree0bff1ede5007a36651d434918f8b93d47e9a4c9e
parent5bc4327e2c55c33342a6850c4741e2b63ff96aec (diff)
downloadcpython-fc115c9bde52a58b4fb9be2b80c3d6be8a4d2454.zip
cpython-fc115c9bde52a58b4fb9be2b80c3d6be8a4d2454.tar.gz
cpython-fc115c9bde52a58b4fb9be2b80c3d6be8a4d2454.tar.bz2
bpo-41086: Add exception for uninstantiated interpolation (configparser) (GH-21062)
* Add exception for uninstantiated interpolation (configparser) The current feedback when users try to pass an uninstantiated interpolation into a ConfigParser is an error message that does not help users solve the problem. This current error of `TypeError: before_set() missing 1 required positional argument: 'value'` does not display until the parser is used, which usually results in the assumption that instantiation of the parser was done correctly. The new exception of InterpolationTypeError, will be raised on the line where the ConfigParser is instantiated. This will result in users see the line that has the error in their backtrace for faster debugging. There have been a number of bugs created in the issue tracker, which could have been addressed by: https://bugs.python.org/issue26831 and https://bugs.python.org/issue26469 * 📜🤖 Added by blurb_it. * Replace custom Error with TypeError Per feedback from @iritkatriel, the custom InterpolationTypeError has been dropped in favour of a TypeError with a custom message, and the unittests have been expanded. * More verbose message Co-authored-by: blurb-it[bot] <43283697+blurb-it[bot]@users.noreply.github.com> Co-authored-by: Łukasz Langa <lukasz@langa.pl>
-rw-r--r--Lib/configparser.py5
-rw-r--r--Lib/test/test_configparser.py8
-rw-r--r--Misc/NEWS.d/next/Library/2020-06-23-01-50-24.bpo-41086.YnOvpS.rst1
3 files changed, 14 insertions, 0 deletions
diff --git a/Lib/configparser.py b/Lib/configparser.py
index 3470624..f5666f5 100644
--- a/Lib/configparser.py
+++ b/Lib/configparser.py
@@ -633,6 +633,11 @@ class RawConfigParser(MutableMapping):
self._interpolation = self._DEFAULT_INTERPOLATION
if self._interpolation is None:
self._interpolation = Interpolation()
+ if not isinstance(self._interpolation, Interpolation):
+ raise TypeError(
+ f"interpolation= must be None or an instance of Interpolation;"
+ f" got an object of type {type(self._interpolation)}"
+ )
if converters is not _UNSET:
self._converters.update(converters)
if defaults:
diff --git a/Lib/test/test_configparser.py b/Lib/test/test_configparser.py
index e9b03e6..569959c 100644
--- a/Lib/test/test_configparser.py
+++ b/Lib/test/test_configparser.py
@@ -1048,6 +1048,14 @@ class ConfigParserTestCaseLegacyInterpolation(ConfigParserTestCase):
self.assertEqual(cf.get("sect", "option2"), "foo%%bar")
+class ConfigParserTestCaseInvalidInterpolationType(unittest.TestCase):
+ def test_error_on_wrong_type_for_interpolation(self):
+ for value in [configparser.ExtendedInterpolation, 42, "a string"]:
+ with self.subTest(value=value):
+ with self.assertRaises(TypeError):
+ configparser.ConfigParser(interpolation=value)
+
+
class ConfigParserTestCaseNonStandardDelimiters(ConfigParserTestCase):
delimiters = (':=', '$')
comment_prefixes = ('//', '"')
diff --git a/Misc/NEWS.d/next/Library/2020-06-23-01-50-24.bpo-41086.YnOvpS.rst b/Misc/NEWS.d/next/Library/2020-06-23-01-50-24.bpo-41086.YnOvpS.rst
new file mode 100644
index 0000000..1041c04
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2020-06-23-01-50-24.bpo-41086.YnOvpS.rst
@@ -0,0 +1 @@
+Make the :class:`configparser.ConfigParser` constructor raise :exc:`TypeError` if the ``interpolation`` parameter is not of type :class:`configparser.Interpolation`