This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: Add DeprecationWarning to configparser's LegacyInterpolation
Type: Stage: resolved
Components: Library (Lib) Versions: Python 3.11
process
Status: closed Resolution: fixed
Dependencies: Superseder:
Assigned To: Nosy List: gregory.p.smith, hugovk, lukasz.langa, vstinner
Priority: normal Keywords: patch

Created on 2022-02-02 07:01 by hugovk, last changed 2022-04-11 14:59 by admin. This issue is now closed.

Pull Requests
URL Status Linked Edit
PR 30927 merged hugovk, 2022-02-02 07:07
Messages (5)
msg412339 - (view) Author: Hugo van Kemenade (hugovk) * (Python triager) Date: 2022-02-02 07:01
The LegacyInterpolation class of configparser has been deprecated in docs since 3.2, but without raising a DeprecationWarning.

The 3.2 HISTORY file says:

> - configparser: the SafeConfigParser class has been renamed to ConfigParser.
> The legacy ConfigParser class has been removed but its interpolation mechanism is still available as LegacyInterpolation.

Searching the top 5,000 PyPI sdists, there's very little (if any "real") use of LegacyInterpolation. Details: https://bugs.python.org/issue45173#msg409685

Other configparser deprecations were added in 3.2, but with DeprecationWarnings.

Let's add a DeprecationWarning for a couple of releases before removal.
msg412347 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2022-02-02 10:02
Oh, LegacyInterpolation is not documented at:
https://docs.python.org/dev/library/configparser.html

> Other configparser deprecations were added in 3.2, but with DeprecationWarnings.

Its deprecation was never documented anywhere in Doc/.

Well, to respect the PEP 387, the class should emit a DeprecationWarning and its depreaction must be documented in What's New in Python 3.11.


> The LegacyInterpolation class of configparser has been deprecated in docs since 3.2, but without raising a DeprecationWarning.

I found the following change:
---
commit 7f64c8a5121576fd8f92010b7a936b89581c4051
Author: Łukasz Langa <lukasz@langa.pl>
Date:   Thu Dec 16 01:16:22 2010 +0000

    Broken ConfigParser removed, SafeConfigParser renamed to ConfigParser.
    Life is beatiful once again.
---

It renamed BrokenInterpolation to LegacyInterpolation:

-class BrokenInterpolation(Interpolation):
-    """Deprecated interpolation as implemented in the classic ConfigParser.
+class LegacyInterpolation(Interpolation):
+    """Deprecated interpolation used in old versions of ConfigParser.


The BrokenInterpolation class was added  by bpo-10499:
---
commit b6a6f5f886ed869612e16cd1e29a1190996dc78d
Author: Łukasz Langa <lukasz@langa.pl>
Date:   Fri Dec 3 16:28:00 2010 +0000

    Issue 10499: Modular interpolation in configparser
---

It would be nice to have Łukasz's opinion on deprecating LegacyInterpolation.


The configparser.RawConfigParser has an "interpolation" parameter and configparser.RawConfigParser._DEFAULT_INTERPOLATION is an instance of configparser.Interpolation:
---
    # Interpolation algorithm to be used if the user does not specify another        
    _DEFAULT_INTERPOLATION = Interpolation()                                       
---


If the BrokenInterpolation is removed in Python 3.13 and a project is affected by the removal, can it simply copy/paste the Python 3.12 copy in its project and continue using the class? configparser.Interpolation seems to be a clean ABC class, so it seems safe to copy/paste the code. It doesn't seem to depend on anything but configparser.Interpolation which is public (even if it's not documented).


https://bugs.python.org/issue45173#msg409685:
> Searching 4,764 sdists from the top 5,000 PyPI packages, these 13 contain "LegacyInterpolation": (...)
> two are stdlib backports: (...)
> The others are all configparser.pyi typeshed stub files: (...)

I understand that *in practice*, removing the class would impact no project of the top 5000 PyPI projects. Thanks for checking!
msg412391 - (view) Author: Hugo van Kemenade (hugovk) * (Python triager) Date: 2022-02-02 18:54
> > Other configparser deprecations were added in 3.2, but with DeprecationWarnings.

> Its deprecation was never documented anywhere in Doc/.

Correct, only in the docstring:

```
class LegacyInterpolation(Interpolation):
    """Deprecated interpolation used in old versions of ConfigParser.
    Use BasicInterpolation or ExtendedInterpolation instead."""
```

I've updated GH-30927 to say "deprecated in the docstring" instead of "deprecated in docs".
msg416785 - (view) Author: Gregory P. Smith (gregory.p.smith) * (Python committer) Date: 2022-04-05 15:15
New changeset 75280944e5ca957eec7f814b9d0608fc84fc5811 by Hugo van Kemenade in branch 'main':
bpo-46607: Add DeprecationWarning for LegacyInterpolation, deprecated in docs since 3.2 (GH-30927)
https://github.com/python/cpython/commit/75280944e5ca957eec7f814b9d0608fc84fc5811
msg416822 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2022-04-05 22:08
Thanks Hugo for the your contribution. I close the issue.

> Searching the top 5,000 PyPI sdists, there's very little (if any "real") use of LegacyInterpolation. Details: https://bugs.python.org/issue45173#msg409685

You can offer them a PR to avoid the deprecated API, or at least notify them by creating an issue that this API is deprecated in Python 3.11.
History
Date User Action Args
2022-04-11 14:59:55adminsetgithub: 90765
2022-04-05 22:08:56vstinnersetstatus: open -> closed
resolution: fixed
messages: + msg416822

stage: patch review -> resolved
2022-04-05 15:15:15gregory.p.smithsetnosy: + gregory.p.smith
messages: + msg416785
2022-02-02 18:54:28hugovksetmessages: + msg412391
2022-02-02 10:02:47vstinnersetnosy: + vstinner, lukasz.langa
messages: + msg412347
2022-02-02 07:07:05hugovksetkeywords: + patch
stage: patch review
pull_requests: + pull_request29258
2022-02-02 07:01:09hugovkcreate