diff --git a/Doc/whatsnew/3.11.rst b/Doc/whatsnew/3.11.rst index c312645c31c..537fa49fd2f 100644 --- a/Doc/whatsnew/3.11.rst +++ b/Doc/whatsnew/3.11.rst @@ -590,6 +590,12 @@ Deprecated (Contributed by Hugo van Kemenade in :issue:`45173`.) +* :class:`configparser.LegacyInterpolation` has been deprecated in the docstring + since Python 3.2. It now emits a :exc:`DeprecationWarning` and will be removed + in Python 3.13. Use :class:`configparser.BasicInterpolation` or + :class:`configparser.ExtendedInterpolation instead. + (Contributed by Hugo van Kemenade in :issue:`46607`.) + * The :func:`locale.getdefaultlocale` function is deprecated and will be removed in Python 3.13. Use :func:`locale.setlocale`, :func:`locale.getpreferredencoding(False) ` and diff --git a/Lib/configparser.py b/Lib/configparser.py index f5666f518f1..de9ee537ac1 100644 --- a/Lib/configparser.py +++ b/Lib/configparser.py @@ -525,6 +525,15 @@ class LegacyInterpolation(Interpolation): _KEYCRE = re.compile(r"%\(([^)]*)\)s|.") + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + warnings.warn( + "LegacyInterpolation has been deprecated since Python 3.2 " + "and will be removed from the configparser module in Python 3.13. " + "Use BasicInterpolation or ExtendedInterpolation instead.", + DeprecationWarning, stacklevel=2 + ) + def before_get(self, parser, section, option, value, vars): rawval = value depth = MAX_INTERPOLATION_DEPTH diff --git a/Lib/test/test_configparser.py b/Lib/test/test_configparser.py index 569959c3ed9..efd98ffb67a 100644 --- a/Lib/test/test_configparser.py +++ b/Lib/test/test_configparser.py @@ -1666,6 +1666,14 @@ class CoverageOneHundredTestCase(unittest.TestCase): for warning in w: self.assertTrue(warning.category is DeprecationWarning) + def test_legacyinterpolation_deprecation(self): + with warnings.catch_warnings(record=True) as w: + warnings.simplefilter("always", DeprecationWarning) + configparser.LegacyInterpolation() + self.assertGreaterEqual(len(w), 1) + for warning in w: + self.assertIs(warning.category, DeprecationWarning) + def test_sectionproxy_repr(self): parser = configparser.ConfigParser() parser.read_string(""" diff --git a/Misc/NEWS.d/next/Library/2022-01-26-18-30-34.bpo-46607.xnhT4a.rst b/Misc/NEWS.d/next/Library/2022-01-26-18-30-34.bpo-46607.xnhT4a.rst new file mode 100644 index 00000000000..e0c7ed0531b --- /dev/null +++ b/Misc/NEWS.d/next/Library/2022-01-26-18-30-34.bpo-46607.xnhT4a.rst @@ -0,0 +1,3 @@ +Add :exc:`DeprecationWarning` to :class:`LegacyInterpolation`, deprecated in +the docstring since Python 3.2. Will be removed in Python 3.13. Use +:class:`BasicInterpolation` or :class:`ExtendedInterpolation` instead.