From b0260735dd7d387a5450ff5304a1cfe2a3a3df65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Lapeyre?= Date: Wed, 10 Jun 2020 12:45:09 +0200 Subject: [PATCH 1/2] Do not expose abstract collection classes in the collections module Original patch in ef092fe9905f61ca27889092ca1248a11aa74498 by Serhiy Storchaka --- Doc/library/collections.rst | 5 ----- Lib/collections/__init__.py | 15 --------------- .../2020-06-10-12-44-48.bpo-40937.6o7gGK.rst | 2 ++ 3 files changed, 2 insertions(+), 20 deletions(-) create mode 100644 Misc/NEWS.d/next/Library/2020-06-10-12-44-48.bpo-40937.6o7gGK.rst diff --git a/Doc/library/collections.rst b/Doc/library/collections.rst index f538da5e1c9faa..b7ab8fca4137ba 100644 --- a/Doc/library/collections.rst +++ b/Doc/library/collections.rst @@ -33,11 +33,6 @@ Python's general purpose built-in containers, :class:`dict`, :class:`list`, :class:`UserString` wrapper around string objects for easier string subclassing ===================== ==================================================================== -.. deprecated-removed:: 3.3 3.10 - Moved :ref:`collections-abstract-base-classes` to the :mod:`collections.abc` module. - For backwards compatibility, they continue to be visible in this module through - Python 3.9. - :class:`ChainMap` objects ------------------------- diff --git a/Lib/collections/__init__.py b/Lib/collections/__init__.py index 6a06cc6a64f169..cee3d83fc89a25 100644 --- a/Lib/collections/__init__.py +++ b/Lib/collections/__init__.py @@ -39,21 +39,6 @@ pass -def __getattr__(name): - # For backwards compatibility, continue to make the collections ABCs - # through Python 3.6 available through the collections module. - # Note, no new collections ABCs were added in Python 3.7 - if name in _collections_abc.__all__: - obj = getattr(_collections_abc, name) - import warnings - warnings.warn("Using or importing the ABCs from 'collections' instead " - "of from 'collections.abc' is deprecated since Python 3.3, " - "and in 3.10 it will stop working", - DeprecationWarning, stacklevel=2) - globals()[name] = obj - return obj - raise AttributeError(f'module {__name__!r} has no attribute {name!r}') - ################################################################################ ### OrderedDict ################################################################################ diff --git a/Misc/NEWS.d/next/Library/2020-06-10-12-44-48.bpo-40937.6o7gGK.rst b/Misc/NEWS.d/next/Library/2020-06-10-12-44-48.bpo-40937.6o7gGK.rst new file mode 100644 index 00000000000000..21d25e8d74ced6 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2020-06-10-12-44-48.bpo-40937.6o7gGK.rst @@ -0,0 +1,2 @@ +The abstract base classes in :mod:`collections.abc` no longer are exposed in +the regular :mod:`collections` module. From d0679a00dcfcb8bf37458e658770c5832b608791 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Lapeyre?= Date: Mon, 15 Jun 2020 17:45:07 +0200 Subject: [PATCH 2/2] Add note back in Whats New --- Doc/whatsnew/3.10.rst | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst index 1234b2e6bbf279..a49a6d916f8ee3 100644 --- a/Doc/whatsnew/3.10.rst +++ b/Doc/whatsnew/3.10.rst @@ -106,6 +106,11 @@ Deprecated Removed ======= +* The abstract base classes in :mod:`collections.abc` no longer are + exposed in the regular :mod:`collections` module. This will help + create a clearer distinction between the concrete classes and the abstract + base classes. + Porting to Python 3.10 ======================