Sitelet https://github.com/python/cpython/issues/89336
Skip to content

Postpone configparser deprecations until 3.12 #89336

Description

@hugovk
BPO 45173
Nosy @gpshead, @vstinner, @ambv, @hugovk, @miss-islington
PRs
  • bpo-45173 Remove configparser deprecations #28292
  • bpo-45173: Keep configparser deprecations until Python 3.12 #30952
  • [3.10] bpo-45173: Note configparser deprecations will be removed in 3.12 #31084
  • Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.

    Show more details

    GitHub fields:

    assignee = None
    closed_at = None
    created_at = <Date 2021-09-11.18:10:39.768>
    labels = ['deferred-blocker', 'library', '3.11']
    title = 'Remove configparser deprecations'
    updated_at = <Date 2022-02-02.18:41:39.221>
    user = 'https://github.com/hugovk'

    bugs.python.org fields:

    activity = <Date 2022-02-02.18:41:39.221>
    actor = 'miss-islington'
    assignee = 'none'
    closed = False
    closed_date = None
    closer = None
    components = ['Library (Lib)']
    creation = <Date 2021-09-11.18:10:39.768>
    creator = 'hugovk'
    dependencies = []
    files = []
    hgrepos = []
    issue_num = 45173
    keywords = ['patch']
    message_count = 10.0
    messages = ['401644', '401645', '401715', '409685', '411810', '412327', '412328', '412340', '412379', '412390']
    nosy_count = 5.0
    nosy_names = ['gregory.p.smith', 'vstinner', 'lukasz.langa', 'hugovk', 'miss-islington']
    pr_nums = ['28292', '30952', '31084']
    priority = 'deferred blocker'
    resolution = None
    stage = 'patch review'
    status = 'open'
    superseder = None
    type = None
    url = 'https://bugs.python.org/issue45173'
    versions = ['Python 3.11']

    Activity

    1. hugovk commented on Sep 11, 2021

      @hugovk
      MemberAuthor

      In the configparser module, these have been deprecated since Python 3.2:

      • the SafeConfigParser class,
      • the filename property of the ParsingError class,
      • the readfp method of the ConfigParser class,

      They can be removed in Python 3.11.

    2. added
      3.11only security fixes
      stdlibStandard Library Python modules in the Lib/ directory
      on Sep 11, 2021
    3. hugovk commented on Sep 11, 2021

      @hugovk
      MemberAuthor

      Also, the LegacyInterpolation class is deprecated since Python 3.2 but with no DeprecationWarning.

      A quick sampling of GitHub results shows only copies of CPython's configparser.py and test_configparser.py

      https://github.com/search?l=Python&p=1&q=LegacyInterpolation+extension%3Apy+language%3APython+language%3APython&ref=advsearch&type=Code

      No use found in the top 200 PyPI packages.

      Is it safe to remove now, or should it raise DeprecationWarning for a couple of releases first?

    4. ambv commented on Sep 13, 2021

      @ambv
      Contributor

      New changeset 1fc41ae by Hugo van Kemenade in branch 'main':
      bpo-45173 Remove configparser deprecations (GH-28292)
      1fc41ae

    5. hugovk commented on Jan 4, 2022

      @hugovk
      MemberAuthor

      Searching 4,764 sdists from the top 5,000 PyPI packages, these 13 contain "LegacyInterpolation":

      configparser-5.1.0.tar.gz
      configparser2-4.0.0.tar.gz
      eth_abi-2.1.1.tar.gz
      eth-account-0.5.6.tar.gz
      eth-hash-0.3.2.tar.gz
      eth-utils-1.10.0.tar.gz
      hexbytes-0.2.2.tar.gz
      jedi-0.18.1.tar.gz
      magicinvoke-2.4.5.tar.gz
      mypy-0.910.tar.gz
      pytype-2021.11.12.tar.gz
      web.py-0.62.tar.gz
      webcolors-1.11.1.tar.gz
      

      The first two are stdlib backports: configparser is active and configparser2 was last updated in 2015:

      configparser-5.1.0/src/backports/configparser/__init__.py:    "LegacyInterpolation",
      configparser-5.1.0/src/backports/configparser/__init__.py:class LegacyInterpolation(Interpolation):
      configparser-5.1.0/src/configparser.py:    "LegacyInterpolation",
      configparser-5.1.0/src/configparser.py:    LegacyInterpolation,
      configparser-5.1.0/src/test_configparser.py:        elif isinstance(self.interpolation, configparser.LegacyInterpolation):
      configparser-5.1.0/src/test_configparser.py:        elif isinstance(self.interpolation, configparser.LegacyInterpolation):
      configparser-5.1.0/src/test_configparser.py:        elif isinstance(self.interpolation, configparser.LegacyInterpolation):
      configparser-5.1.0/src/test_configparser.py:    interpolation = configparser.LegacyInterpolation()
      configparser-5.1.0/src/test_configparser.py:class ConfigParserTestCaseLegacyInterpolation(ConfigParserTestCase, unittest.TestCase):
      
      configparser2-4.0.0/src/backports/configparser2/__init__.py:class LegacyInterpolation(Interpolation):
      configparser2-4.0.0/src/configparser2.py:    LegacyInterpolation,
      

      The others are all configparser.pyi typeshed stub files:

      eth_abi-2.1.1/venv/lib/python3.6/site-packages/mypy/typeshed/stdlib/3/configparser.pyi:class LegacyInterpolation(Interpolation): ...
      eth_abi-2.1.1/venv/lib64/python3.6/site-packages/mypy/typeshed/stdlib/3/configparser.pyi:class LegacyInterpolation(Interpolation): ...
      eth-account-0.5.6/venv-py3.8/lib/python3.8/site-packages/jedi/third_party/typeshed/stdlib/3/configparser.pyi:class LegacyInterpolation(Interpolation): ...
      eth-account-0.5.6/venv-py3.8/lib/python3.8/site-packages/mypy/typeshed/stdlib/3/configparser.pyi:class LegacyInterpolation(Interpolation): ...
      eth-account-0.5.6/venv-py3.8/lib64/python3.8/site-packages/jedi/third_party/typeshed/stdlib/3/configparser.pyi:class LegacyInterpolation(Interpolation): ...
      eth-account-0.5.6/venv-py3.8/lib64/python3.8/site-packages/mypy/typeshed/stdlib/3/configparser.pyi:class LegacyInterpolation(Interpolation): ...
      eth-account-0.5.6/venv/lib/python3.8/site-packages/jedi/third_party/typeshed/stdlib/3/configparser.pyi:class LegacyInterpolation(Interpolation): ...
      eth-account-0.5.6/venv/lib/python3.8/site-packages/mypy/typeshed/stdlib/3/configparser.pyi:class LegacyInterpolation(Interpolation): ...
      eth-account-0.5.6/venv/lib64/python3.8/site-packages/jedi/third_party/typeshed/stdlib/3/configparser.pyi:class LegacyInterpolation(Interpolation): ...
      eth-account-0.5.6/venv/lib64/python3.8/site-packages/mypy/typeshed/stdlib/3/configparser.pyi:class LegacyInterpolation(Interpolation): ...
      eth-hash-0.3.2/venv-py3.8/lib/python3.8/site-packages/jedi/third_party/typeshed/stdlib/3/configparser.pyi:class LegacyInterpolation(Interpolation): ...
      eth-hash-0.3.2/venv-py3.8/lib/python3.8/site-packages/mypy/typeshed/stdlib/3/configparser.pyi:class LegacyInterpolation(Interpolation): ...
      eth-hash-0.3.2/venv-py3.8/lib64/python3.8/site-packages/jedi/third_party/typeshed/stdlib/3/configparser.pyi:class LegacyInterpolation(Interpolation): ...
      eth-hash-0.3.2/venv-py3.8/lib64/python3.8/site-packages/mypy/typeshed/stdlib/3/configparser.pyi:class LegacyInterpolation(Interpolation): ...
      eth-hash-0.3.2/venv/lib/python3.8/site-packages/jedi/third_party/typeshed/stdlib/3/configparser.pyi:class LegacyInterpolation(Interpolation): ...
      eth-hash-0.3.2/venv/lib/python3.8/site-packages/mypy/typeshed/stdlib/3/configparser.pyi:class LegacyInterpolation(Interpolation): ...
      eth-hash-0.3.2/venv/lib64/python3.8/site-packages/jedi/third_party/typeshed/stdlib/3/configparser.pyi:class LegacyInterpolation(Interpolation): ...
      eth-hash-0.3.2/venv/lib64/python3.8/site-packages/mypy/typeshed/stdlib/3/configparser.pyi:class LegacyInterpolation(Interpolation): ...
      eth-utils-1.10.0/venv-py3.8/lib/python3.8/site-packages/jedi/third_party/typeshed/stdlib/3/configparser.pyi:class LegacyInterpolation(Interpolation): ...
      eth-utils-1.10.0/venv-py3.8/lib/python3.8/site-packages/mypy/typeshed/stdlib/3/configparser.pyi:class LegacyInterpolation(Interpolation): ...
      eth-utils-1.10.0/venv-py3.8/lib64/python3.8/site-packages/jedi/third_party/typeshed/stdlib/3/configparser.pyi:class LegacyInterpolation(Interpolation): ...
      eth-utils-1.10.0/venv-py3.8/lib64/python3.8/site-packages/mypy/typeshed/stdlib/3/configparser.pyi:class LegacyInterpolation(Interpolation): ...
      eth-utils-1.10.0/venv/lib/python3.8/site-packages/jedi/third_party/typeshed/stdlib/3/configparser.pyi:class LegacyInterpolation(Interpolation): ...
      eth-utils-1.10.0/venv/lib/python3.8/site-packages/mypy/typeshed/stdlib/3/configparser.pyi:class LegacyInterpolation(Interpolation): ...
      eth-utils-1.10.0/venv/lib64/python3.8/site-packages/jedi/third_party/typeshed/stdlib/3/configparser.pyi:class LegacyInterpolation(Interpolation): ...
      eth-utils-1.10.0/venv/lib64/python3.8/site-packages/mypy/typeshed/stdlib/3/configparser.pyi:class LegacyInterpolation(Interpolation): ...
      hexbytes-0.2.2/venv-py3.8/lib/python3.8/site-packages/jedi/third_party/typeshed/stdlib/3/configparser.pyi:class LegacyInterpolation(Interpolation): ...
      hexbytes-0.2.2/venv-py3.8/lib/python3.8/site-packages/mypy/typeshed/stdlib/3/configparser.pyi:class LegacyInterpolation(Interpolation): ...
      hexbytes-0.2.2/venv-py3.8/lib64/python3.8/site-packages/jedi/third_party/typeshed/stdlib/3/configparser.pyi:class LegacyInterpolation(Interpolation): ...
      hexbytes-0.2.2/venv-py3.8/lib64/python3.8/site-packages/mypy/typeshed/stdlib/3/configparser.pyi:class LegacyInterpolation(Interpolation): ...
      hexbytes-0.2.2/venv/lib/python3.8/site-packages/jedi/third_party/typeshed/stdlib/3/configparser.pyi:class LegacyInterpolation(Interpolation): ...
      hexbytes-0.2.2/venv/lib/python3.8/site-packages/mypy/typeshed/stdlib/3/configparser.pyi:class LegacyInterpolation(Interpolation): ...
      hexbytes-0.2.2/venv/lib64/python3.8/site-packages/jedi/third_party/typeshed/stdlib/3/configparser.pyi:class LegacyInterpolation(Interpolation): ...
      hexbytes-0.2.2/venv/lib64/python3.8/site-packages/mypy/typeshed/stdlib/3/configparser.pyi:class LegacyInterpolation(Interpolation): ...
      jedi-0.18.1/jedi/third_party/typeshed/stdlib/3/configparser.pyi:class LegacyInterpolation(Interpolation): ...
      mypy-0.910/mypy/typeshed/stdlib/configparser.pyi:class LegacyInterpolation(Interpolation):
      pytype-2021.11.12/pytype/typeshed/stdlib/configparser.pyi:class LegacyInterpolation(Interpolation):
      
    6. gpshead commented on Jan 26, 2022

      @gpshead
      Member

      Per https://mail.python.org/archives/list/python-dev@python.org/thread/GJTREADEXYAETECE5JDTPYWK4WMTKYGR/ we want to revert 1fc41ae for 3.11 to avoid causing pain.

      per that thread and https://discuss.python.org/t/experience-with-python-3-11-in-fedora/12911 it sounds like you may be on top of filing upstream issues/PRs to get OSS projects to stop using the deprecated APIs. great! that should help this stick in 3.12.

      as the commit removed several things at once, I suggest a full rollback, and smaller PRs for individual things if your upstream python project testing reveals things that nobody appears to be depending on.

    7. vstinner commented on Feb 2, 2022

      @vstinner
      Member

      Searching 4,764 sdists from the top 5,000 PyPI packages, these 13 contain "LegacyInterpolation"

      Other removed symbols are causing troubles, like SafeConfigParser.

      Example of Fedora bz #2025600: mom fails to build with Python 3.11: AttributeError: module 'configparser' has no attribute 'SafeConfigParser'.

      => https://bugzilla.redhat.com/show_bug.cgi?id=2025600

      Another example: python-iniparse fails to build with Python 3.11: AttributeError: 'RawConfigParser' object has no attribute 'readfp'

      https://bugzilla.redhat.com/show_bug.cgi?id=2019017

      You can try to unfold https://bugzilla.redhat.com/buglist.cgi?bug_id=2016048&bug_id_type=anddependson&format=tvp and search for "configparser".

    8. vstinner commented on Feb 2, 2022

      @vstinner
      Member

      Currently, the issue title is "Remove configparser deprecations".

      #75110 doesn't remove deprecated functions, but adds new warnings. It's really confusing to make this change as part of this issue.

      Can you please create a new issue for #75110 "bpo-45173: Add DeprecationWarning to LegacyInterpolation"? If it's removed, it's not going to be removed before Python 3.13, so it's not directly related to this issue. By the way, it would be nice explain the rationale for removing it.

    9. hugovk commented on Feb 2, 2022

      @hugovk
      MemberAuthor

      Sure, please see https://bugs.python.org/issue46607.

      I've rebased #75110 to use the new issue number.

    10. gpshead commented on Feb 2, 2022

      @gpshead
      Member

      New changeset e8659b4 by Hugo van Kemenade in branch 'main':
      bpo-45173: Keep configparser deprecations until Python 3.12 (GH-30952)
      e8659b4

    11. miss-islington commented on Feb 2, 2022

      @miss-islington
      Contributor

      New changeset ba4d79a by Hugo van Kemenade in branch '3.10':
      [3.10] bpo-45173: Note configparser deprecations will be removed in 3.12 (GH-31084)
      ba4d79a

    12. 75 remaining items

    13. deleted a comment from Abirhasankas143 on May 8, 2024
    14. added a commit that references this issue on May 10, 2024
    Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

    Metadata

    Metadata

    Assignees

    No one assigned

      Labels

      3.11only security fixesdeferred-blockerstdlibStandard Library Python modules in the Lib/ directory

      Projects

      No projects

        Milestone

        No milestone

        Relationships

        None yet

        Development

        No branches or pull requests

        Issue actions