mirror of
https://github.com/python/cpython.git
synced 2025-09-27 02:39:58 +00:00
gh-118803: Remove ByteString
from typing
and collections.abc
(#118804)
This commit is contained in:
parent
cb6f75a32c
commit
2f4db5a04d
12 changed files with 14 additions and 114 deletions
|
@ -141,9 +141,6 @@ ABC Inherits from Abstract Methods Mi
|
||||||
``__len__``,
|
``__len__``,
|
||||||
``insert``
|
``insert``
|
||||||
|
|
||||||
:class:`ByteString` :class:`Sequence` ``__getitem__``, Inherited :class:`Sequence` methods
|
|
||||||
``__len__``
|
|
||||||
|
|
||||||
:class:`Set` :class:`Collection` ``__contains__``, ``__le__``, ``__lt__``, ``__eq__``, ``__ne__``,
|
:class:`Set` :class:`Collection` ``__contains__``, ``__le__``, ``__lt__``, ``__eq__``, ``__ne__``,
|
||||||
``__iter__``, ``__gt__``, ``__ge__``, ``__and__``, ``__or__``,
|
``__iter__``, ``__gt__``, ``__ge__``, ``__and__``, ``__or__``,
|
||||||
``__len__`` ``__sub__``, ``__xor__``, and ``isdisjoint``
|
``__len__`` ``__sub__``, ``__xor__``, and ``isdisjoint``
|
||||||
|
@ -257,7 +254,6 @@ Collections Abstract Base Classes -- Detailed Descriptions
|
||||||
|
|
||||||
.. class:: Sequence
|
.. class:: Sequence
|
||||||
MutableSequence
|
MutableSequence
|
||||||
ByteString
|
|
||||||
|
|
||||||
ABCs for read-only and mutable :term:`sequences <sequence>`.
|
ABCs for read-only and mutable :term:`sequences <sequence>`.
|
||||||
|
|
||||||
|
@ -274,12 +270,6 @@ Collections Abstract Base Classes -- Detailed Descriptions
|
||||||
The index() method added support for *stop* and *start*
|
The index() method added support for *stop* and *start*
|
||||||
arguments.
|
arguments.
|
||||||
|
|
||||||
.. deprecated-removed:: 3.12 3.14
|
|
||||||
The :class:`ByteString` ABC has been deprecated.
|
|
||||||
For use in typing, prefer a union, like ``bytes | bytearray``, or
|
|
||||||
:class:`collections.abc.Buffer`.
|
|
||||||
For use as an ABC, prefer :class:`Sequence` or :class:`collections.abc.Buffer`.
|
|
||||||
|
|
||||||
.. class:: Set
|
.. class:: Set
|
||||||
MutableSet
|
MutableSet
|
||||||
|
|
||||||
|
|
|
@ -5061,7 +5061,6 @@ list is non-exhaustive.
|
||||||
* :class:`collections.abc.MutableMapping`
|
* :class:`collections.abc.MutableMapping`
|
||||||
* :class:`collections.abc.Sequence`
|
* :class:`collections.abc.Sequence`
|
||||||
* :class:`collections.abc.MutableSequence`
|
* :class:`collections.abc.MutableSequence`
|
||||||
* :class:`collections.abc.ByteString`
|
|
||||||
* :class:`collections.abc.MappingView`
|
* :class:`collections.abc.MappingView`
|
||||||
* :class:`collections.abc.KeysView`
|
* :class:`collections.abc.KeysView`
|
||||||
* :class:`collections.abc.ItemsView`
|
* :class:`collections.abc.ItemsView`
|
||||||
|
|
|
@ -3502,14 +3502,6 @@ Aliases to container ABCs in :mod:`collections.abc`
|
||||||
:class:`collections.abc.Set` now supports subscripting (``[]``).
|
:class:`collections.abc.Set` now supports subscripting (``[]``).
|
||||||
See :pep:`585` and :ref:`types-genericalias`.
|
See :pep:`585` and :ref:`types-genericalias`.
|
||||||
|
|
||||||
.. class:: ByteString(Sequence[int])
|
|
||||||
|
|
||||||
This type represents the types :class:`bytes`, :class:`bytearray`,
|
|
||||||
and :class:`memoryview` of byte sequences.
|
|
||||||
|
|
||||||
.. deprecated-removed:: 3.9 3.14
|
|
||||||
Prefer :class:`collections.abc.Buffer`, or a union like ``bytes | bytearray | memoryview``.
|
|
||||||
|
|
||||||
.. class:: Collection(Sized, Iterable[T_co], Container[T_co])
|
.. class:: Collection(Sized, Iterable[T_co], Container[T_co])
|
||||||
|
|
||||||
Deprecated alias to :class:`collections.abc.Collection`.
|
Deprecated alias to :class:`collections.abc.Collection`.
|
||||||
|
@ -3875,10 +3867,6 @@ convenience. This is subject to change, and not all deprecations are listed.
|
||||||
- 3.9
|
- 3.9
|
||||||
- Undecided (see :ref:`deprecated-aliases` for more information)
|
- Undecided (see :ref:`deprecated-aliases` for more information)
|
||||||
- :pep:`585`
|
- :pep:`585`
|
||||||
* - :class:`typing.ByteString`
|
|
||||||
- 3.9
|
|
||||||
- 3.14
|
|
||||||
- :gh:`91896`
|
|
||||||
* - :data:`typing.Text`
|
* - :data:`typing.Text`
|
||||||
- 3.11
|
- 3.11
|
||||||
- Undecided
|
- Undecided
|
||||||
|
|
|
@ -1183,7 +1183,7 @@ Deprecated
|
||||||
replaced by :data:`calendar.JANUARY` and :data:`calendar.FEBRUARY`.
|
replaced by :data:`calendar.JANUARY` and :data:`calendar.FEBRUARY`.
|
||||||
(Contributed by Prince Roshan in :gh:`103636`.)
|
(Contributed by Prince Roshan in :gh:`103636`.)
|
||||||
|
|
||||||
* :mod:`collections.abc`: Deprecated :class:`collections.abc.ByteString`.
|
* :mod:`collections.abc`: Deprecated :class:`!collections.abc.ByteString`.
|
||||||
Prefer :class:`Sequence` or :class:`collections.abc.Buffer`.
|
Prefer :class:`Sequence` or :class:`collections.abc.Buffer`.
|
||||||
For use in typing, prefer a union, like ``bytes | bytearray``, or :class:`collections.abc.Buffer`.
|
For use in typing, prefer a union, like ``bytes | bytearray``, or :class:`collections.abc.Buffer`.
|
||||||
(Contributed by Shantanu Jain in :gh:`91896`.)
|
(Contributed by Shantanu Jain in :gh:`91896`.)
|
||||||
|
@ -1293,7 +1293,7 @@ Deprecated
|
||||||
:class:`collections.abc.Hashable` and :class:`collections.abc.Sized` respectively, are
|
:class:`collections.abc.Hashable` and :class:`collections.abc.Sized` respectively, are
|
||||||
deprecated. (:gh:`94309`.)
|
deprecated. (:gh:`94309`.)
|
||||||
|
|
||||||
* :class:`typing.ByteString`, deprecated since Python 3.9, now causes a
|
* :class:`!typing.ByteString`, deprecated since Python 3.9, now causes a
|
||||||
:exc:`DeprecationWarning` to be emitted when it is used.
|
:exc:`DeprecationWarning` to be emitted when it is used.
|
||||||
(Contributed by Alex Waygood in :gh:`91896`.)
|
(Contributed by Alex Waygood in :gh:`91896`.)
|
||||||
|
|
||||||
|
|
|
@ -1573,7 +1573,7 @@ Pending Removal in Python 3.14
|
||||||
Use :class:`ast.Constant` instead.
|
Use :class:`ast.Constant` instead.
|
||||||
(Contributed by Serhiy Storchaka in :gh:`90953`.)
|
(Contributed by Serhiy Storchaka in :gh:`90953`.)
|
||||||
|
|
||||||
* :mod:`collections.abc`: Deprecated :class:`~collections.abc.ByteString`.
|
* :mod:`collections.abc`: Deprecated :class:`!collections.abc.ByteString`.
|
||||||
Prefer :class:`!Sequence` or :class:`~collections.abc.Buffer`.
|
Prefer :class:`!Sequence` or :class:`~collections.abc.Buffer`.
|
||||||
For use in typing, prefer a union, like ``bytes | bytearray``,
|
For use in typing, prefer a union, like ``bytes | bytearray``,
|
||||||
or :class:`collections.abc.Buffer`.
|
or :class:`collections.abc.Buffer`.
|
||||||
|
@ -1647,7 +1647,7 @@ Pending Removal in Python 3.14
|
||||||
May be removed in 3.14.
|
May be removed in 3.14.
|
||||||
(Contributed by Nikita Sobolev in :gh:`101866`.)
|
(Contributed by Nikita Sobolev in :gh:`101866`.)
|
||||||
|
|
||||||
* :mod:`typing`: :class:`~typing.ByteString`, deprecated since Python 3.9,
|
* :mod:`typing`: :class:`!typing.ByteString`, deprecated since Python 3.9,
|
||||||
now causes a :exc:`DeprecationWarning` to be emitted when it is used.
|
now causes a :exc:`DeprecationWarning` to be emitted when it is used.
|
||||||
|
|
||||||
* :mod:`urllib`:
|
* :mod:`urllib`:
|
||||||
|
|
|
@ -105,6 +105,9 @@ Removed
|
||||||
It had previously raised a :exc:`DeprecationWarning` since Python 3.9. (Contributed
|
It had previously raised a :exc:`DeprecationWarning` since Python 3.9. (Contributed
|
||||||
by Jelle Zijlstra in :gh:`118767`.)
|
by Jelle Zijlstra in :gh:`118767`.)
|
||||||
|
|
||||||
|
* :class:`!typing.ByteString` and :class:`!collections.abc.ByteString`
|
||||||
|
are removed. They had previously raised a :exc:`DeprecationWarning`
|
||||||
|
since Python 3.12.
|
||||||
|
|
||||||
Porting to Python 3.14
|
Porting to Python 3.14
|
||||||
======================
|
======================
|
||||||
|
|
|
@ -49,7 +49,7 @@ __all__ = ["Awaitable", "Coroutine",
|
||||||
"Mapping", "MutableMapping",
|
"Mapping", "MutableMapping",
|
||||||
"MappingView", "KeysView", "ItemsView", "ValuesView",
|
"MappingView", "KeysView", "ItemsView", "ValuesView",
|
||||||
"Sequence", "MutableSequence",
|
"Sequence", "MutableSequence",
|
||||||
"ByteString", "Buffer",
|
"Buffer",
|
||||||
]
|
]
|
||||||
|
|
||||||
# This module has been renamed from collections.abc to _collections_abc to
|
# This module has been renamed from collections.abc to _collections_abc to
|
||||||
|
@ -1068,40 +1068,10 @@ class Sequence(Reversible, Collection):
|
||||||
|
|
||||||
Sequence.register(tuple)
|
Sequence.register(tuple)
|
||||||
Sequence.register(str)
|
Sequence.register(str)
|
||||||
|
Sequence.register(bytes)
|
||||||
Sequence.register(range)
|
Sequence.register(range)
|
||||||
Sequence.register(memoryview)
|
Sequence.register(memoryview)
|
||||||
|
|
||||||
class _DeprecateByteStringMeta(ABCMeta):
|
|
||||||
def __new__(cls, name, bases, namespace, **kwargs):
|
|
||||||
if name != "ByteString":
|
|
||||||
import warnings
|
|
||||||
|
|
||||||
warnings._deprecated(
|
|
||||||
"collections.abc.ByteString",
|
|
||||||
remove=(3, 14),
|
|
||||||
)
|
|
||||||
return super().__new__(cls, name, bases, namespace, **kwargs)
|
|
||||||
|
|
||||||
def __instancecheck__(cls, instance):
|
|
||||||
import warnings
|
|
||||||
|
|
||||||
warnings._deprecated(
|
|
||||||
"collections.abc.ByteString",
|
|
||||||
remove=(3, 14),
|
|
||||||
)
|
|
||||||
return super().__instancecheck__(instance)
|
|
||||||
|
|
||||||
class ByteString(Sequence, metaclass=_DeprecateByteStringMeta):
|
|
||||||
"""This unifies bytes and bytearray.
|
|
||||||
|
|
||||||
XXX Should add all their methods.
|
|
||||||
"""
|
|
||||||
|
|
||||||
__slots__ = ()
|
|
||||||
|
|
||||||
ByteString.register(bytes)
|
|
||||||
ByteString.register(bytearray)
|
|
||||||
|
|
||||||
|
|
||||||
class MutableSequence(Sequence):
|
class MutableSequence(Sequence):
|
||||||
"""All the operations on a read-write sequence.
|
"""All the operations on a read-write sequence.
|
||||||
|
@ -1170,4 +1140,4 @@ class MutableSequence(Sequence):
|
||||||
|
|
||||||
|
|
||||||
MutableSequence.register(list)
|
MutableSequence.register(list)
|
||||||
MutableSequence.register(bytearray) # Multiply inheriting, see ByteString
|
MutableSequence.register(bytearray)
|
||||||
|
|
|
@ -211,7 +211,6 @@ def dash_R_cleanup(fs, ps, pic, zdc, abcs):
|
||||||
zipimport._zip_directory_cache.update(zdc)
|
zipimport._zip_directory_cache.update(zdc)
|
||||||
|
|
||||||
# Clear ABC registries, restoring previously saved ABC registries.
|
# Clear ABC registries, restoring previously saved ABC registries.
|
||||||
# ignore deprecation warning for collections.abc.ByteString
|
|
||||||
abs_classes = [getattr(collections.abc, a) for a in collections.abc.__all__]
|
abs_classes = [getattr(collections.abc, a) for a in collections.abc.__all__]
|
||||||
abs_classes = filter(isabstract, abs_classes)
|
abs_classes = filter(isabstract, abs_classes)
|
||||||
for abc in abs_classes:
|
for abc in abs_classes:
|
||||||
|
|
|
@ -26,7 +26,7 @@ from collections.abc import Sized, Container, Callable, Collection
|
||||||
from collections.abc import Set, MutableSet
|
from collections.abc import Set, MutableSet
|
||||||
from collections.abc import Mapping, MutableMapping, KeysView, ItemsView, ValuesView
|
from collections.abc import Mapping, MutableMapping, KeysView, ItemsView, ValuesView
|
||||||
from collections.abc import Sequence, MutableSequence
|
from collections.abc import Sequence, MutableSequence
|
||||||
from collections.abc import ByteString, Buffer
|
from collections.abc import Buffer
|
||||||
|
|
||||||
|
|
||||||
class TestUserObjects(unittest.TestCase):
|
class TestUserObjects(unittest.TestCase):
|
||||||
|
@ -1935,28 +1935,6 @@ class TestCollectionABCs(ABCTestCase):
|
||||||
assert_index_same(
|
assert_index_same(
|
||||||
nativeseq, seqseq, (letter, start, stop))
|
nativeseq, seqseq, (letter, start, stop))
|
||||||
|
|
||||||
def test_ByteString(self):
|
|
||||||
for sample in [bytes, bytearray]:
|
|
||||||
with self.assertWarns(DeprecationWarning):
|
|
||||||
self.assertIsInstance(sample(), ByteString)
|
|
||||||
self.assertTrue(issubclass(sample, ByteString))
|
|
||||||
for sample in [str, list, tuple]:
|
|
||||||
with self.assertWarns(DeprecationWarning):
|
|
||||||
self.assertNotIsInstance(sample(), ByteString)
|
|
||||||
self.assertFalse(issubclass(sample, ByteString))
|
|
||||||
with self.assertWarns(DeprecationWarning):
|
|
||||||
self.assertNotIsInstance(memoryview(b""), ByteString)
|
|
||||||
self.assertFalse(issubclass(memoryview, ByteString))
|
|
||||||
with self.assertWarns(DeprecationWarning):
|
|
||||||
self.validate_abstract_methods(ByteString, '__getitem__', '__len__')
|
|
||||||
|
|
||||||
with self.assertWarns(DeprecationWarning):
|
|
||||||
class X(ByteString): pass
|
|
||||||
|
|
||||||
with self.assertWarns(DeprecationWarning):
|
|
||||||
# No metaclass conflict
|
|
||||||
class Z(ByteString, Awaitable): pass
|
|
||||||
|
|
||||||
def test_Buffer(self):
|
def test_Buffer(self):
|
||||||
for sample in [bytes, bytearray, memoryview]:
|
for sample in [bytes, bytearray, memoryview]:
|
||||||
self.assertIsInstance(sample(b"x"), Buffer)
|
self.assertIsInstance(sample(b"x"), Buffer)
|
||||||
|
|
|
@ -7128,16 +7128,6 @@ class CollectionsAbcTests(BaseTestCase):
|
||||||
self.assertIsInstance([], typing.MutableSequence)
|
self.assertIsInstance([], typing.MutableSequence)
|
||||||
self.assertNotIsInstance((), typing.MutableSequence)
|
self.assertNotIsInstance((), typing.MutableSequence)
|
||||||
|
|
||||||
def test_bytestring(self):
|
|
||||||
with self.assertWarns(DeprecationWarning):
|
|
||||||
self.assertIsInstance(b'', typing.ByteString)
|
|
||||||
with self.assertWarns(DeprecationWarning):
|
|
||||||
self.assertIsInstance(bytearray(b''), typing.ByteString)
|
|
||||||
with self.assertWarns(DeprecationWarning):
|
|
||||||
class Foo(typing.ByteString): ...
|
|
||||||
with self.assertWarns(DeprecationWarning):
|
|
||||||
class Bar(typing.ByteString, typing.Awaitable): ...
|
|
||||||
|
|
||||||
def test_list(self):
|
def test_list(self):
|
||||||
self.assertIsSubclass(list, typing.List)
|
self.assertIsSubclass(list, typing.List)
|
||||||
|
|
||||||
|
@ -9951,7 +9941,6 @@ class SpecialAttrsTests(BaseTestCase):
|
||||||
typing.AsyncIterable: 'AsyncIterable',
|
typing.AsyncIterable: 'AsyncIterable',
|
||||||
typing.AsyncIterator: 'AsyncIterator',
|
typing.AsyncIterator: 'AsyncIterator',
|
||||||
typing.Awaitable: 'Awaitable',
|
typing.Awaitable: 'Awaitable',
|
||||||
typing.ByteString: 'ByteString',
|
|
||||||
typing.Callable: 'Callable',
|
typing.Callable: 'Callable',
|
||||||
typing.ChainMap: 'ChainMap',
|
typing.ChainMap: 'ChainMap',
|
||||||
typing.Collection: 'Collection',
|
typing.Collection: 'Collection',
|
||||||
|
|
|
@ -64,7 +64,6 @@ __all__ = [
|
||||||
|
|
||||||
# ABCs (from collections.abc).
|
# ABCs (from collections.abc).
|
||||||
'AbstractSet', # collections.abc.Set.
|
'AbstractSet', # collections.abc.Set.
|
||||||
'ByteString',
|
|
||||||
'Container',
|
'Container',
|
||||||
'ContextManager',
|
'ContextManager',
|
||||||
'Hashable',
|
'Hashable',
|
||||||
|
@ -1670,21 +1669,6 @@ class _SpecialGenericAlias(_NotIterable, _BaseGenericAlias, _root=True):
|
||||||
return Union[left, self]
|
return Union[left, self]
|
||||||
|
|
||||||
|
|
||||||
class _DeprecatedGenericAlias(_SpecialGenericAlias, _root=True):
|
|
||||||
def __init__(
|
|
||||||
self, origin, nparams, *, removal_version, inst=True, name=None
|
|
||||||
):
|
|
||||||
super().__init__(origin, nparams, inst=inst, name=name)
|
|
||||||
self._removal_version = removal_version
|
|
||||||
|
|
||||||
def __instancecheck__(self, inst):
|
|
||||||
import warnings
|
|
||||||
warnings._deprecated(
|
|
||||||
f"{self.__module__}.{self._name}", remove=self._removal_version
|
|
||||||
)
|
|
||||||
return super().__instancecheck__(inst)
|
|
||||||
|
|
||||||
|
|
||||||
class _CallableGenericAlias(_NotIterable, _GenericAlias, _root=True):
|
class _CallableGenericAlias(_NotIterable, _GenericAlias, _root=True):
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
assert self._name == 'Callable'
|
assert self._name == 'Callable'
|
||||||
|
@ -2828,9 +2812,6 @@ Mapping = _alias(collections.abc.Mapping, 2)
|
||||||
MutableMapping = _alias(collections.abc.MutableMapping, 2)
|
MutableMapping = _alias(collections.abc.MutableMapping, 2)
|
||||||
Sequence = _alias(collections.abc.Sequence, 1)
|
Sequence = _alias(collections.abc.Sequence, 1)
|
||||||
MutableSequence = _alias(collections.abc.MutableSequence, 1)
|
MutableSequence = _alias(collections.abc.MutableSequence, 1)
|
||||||
ByteString = _DeprecatedGenericAlias(
|
|
||||||
collections.abc.ByteString, 0, removal_version=(3, 14) # Not generic.
|
|
||||||
)
|
|
||||||
# Tuple accepts variable number of parameters.
|
# Tuple accepts variable number of parameters.
|
||||||
Tuple = _TupleType(tuple, -1, inst=False, name='Tuple')
|
Tuple = _TupleType(tuple, -1, inst=False, name='Tuple')
|
||||||
Tuple.__doc__ = \
|
Tuple.__doc__ = \
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
:class:`!typing.ByteString` and :class:`!collections.abc.ByteString` are
|
||||||
|
removed. They had previously raised a :exc:`DeprecationWarning` since Python
|
||||||
|
3.12.
|
Loading…
Add table
Add a link
Reference in a new issue