bpo-39674: Revert "bpo-25988: Do not expose abstract collection classes in the collections module. (GH-10596)" (GH-18545)

This reverts commit ef092fe990.

Update collections __getattr__() and documentation to defer aliases
removal to Python 3.10.
This commit is contained in:
Victor Stinner 2020-02-18 16:28:53 +01:00 committed by GitHub
parent 6e35da9763
commit af5ee3ff61
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 20 additions and 6 deletions

View File

@ -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.

View File

@ -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.

View File

@ -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
################################################################################

View File

@ -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.