Browse Source
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.
pull/18553/head
Victor Stinner
6 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with
20 additions and
6 deletions
-
Doc/library/collections.rst
-
Doc/whatsnew/3.9.rst
-
Lib/collections/__init__.py
-
Misc/NEWS.d/next/Library/2020-02-18-12-31-24.bpo-39674.S_zqVM.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. |
|
|
|
|
|
|
|
@ -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. |
|
|
|
|
|
|
|
@ -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 |
|
|
|
################################################################################ |
|
|
|
|
|
|
|
@ -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. |