summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Doc/library/collections.rst2
-rw-r--r--Doc/whatsnew/3.9.rst5
-rw-r--r--Lib/collections/__init__.py15
-rw-r--r--Misc/NEWS.d/next/Library/2020-02-18-12-31-24.bpo-39674.S_zqVM.rst4
4 files changed, 20 insertions, 6 deletions
diff --git a/Doc/library/collections.rst b/Doc/library/collections.rst
index a5e8d04..65cdf34 100644
--- a/Doc/library/collections.rst
+++ b/Doc/library/collections.rst
@@ -33,7 +33,7 @@ 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.9
+.. 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.8.
diff --git a/Doc/whatsnew/3.9.rst b/Doc/whatsnew/3.9.rst
index 23f0e43..f7e279b 100644
--- a/Doc/whatsnew/3.9.rst
+++ b/Doc/whatsnew/3.9.rst
@@ -471,11 +471,6 @@ Removed
since Python 3.2.
(Contributed by Victor Stinner in :issue:`38916`.)
-* 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.
-
* The undocumented ``sys.callstats()`` function has been removed. Since Python
3.7, it was deprecated and always returned :const:`None`. It required a special
build option ``CALL_PROFILE`` which was already removed in Python 3.7.
diff --git a/Lib/collections/__init__.py b/Lib/collections/__init__.py
index cec6c97..178cdb1 100644
--- a/Lib/collections/__init__.py
+++ b/Lib/collections/__init__.py
@@ -39,6 +39,21 @@ except ImportError:
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-02-18-12-31-24.bpo-39674.S_zqVM.rst b/Misc/NEWS.d/next/Library/2020-02-18-12-31-24.bpo-39674.S_zqVM.rst
new file mode 100644
index 0000000..1d0e906
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2020-02-18-12-31-24.bpo-39674.S_zqVM.rst
@@ -0,0 +1,4 @@
+Revert "Do not expose abstract collection classes in the collections module"
+change (bpo-25988). Aliases to ABC like collections.Mapping are kept in
+Python 3.9 to ease transition from Python 2.7, but will be removed in Python
+3.10.