Releases: python/typing_extensions
Releases ยท python/typing_extensions
4.9.0
This feature release adds typing_extensions.ReadOnly
, as specified
by PEP 705, and makes various other improvements, especially to
@typing_extensions.deprecated()
.
There are no changes since 4.9.0rc1.
4.9.0rc1
- Add support for PEP 705, adding
typing_extensions.ReadOnly
. Patch
by Jelle Zijlstra. - All parameters on
NewType.__call__
are now positional-only. This means that
the signature oftyping_extensions.NewType.__call__
now exactly matches the
signature oftyping.NewType.__call__
. Patch by Alex Waygood. - Fix bug with using
@deprecated
on a mixin class. Inheriting from a
deprecated class now raises aDeprecationWarning
. Patch by Jelle Zijlstra. @deprecated
now gives a better error message if you pass a non-str
argument to themsg
parameter. Patch by Alex Waygood.@deprecated
is now implemented as a class for better introspectability.
Patch by Jelle Zijlstra.- Exclude
__match_args__
fromProtocol
members.
Backport of python/cpython#110683 by Nikita Sobolev. - When creating a
typing_extensions.NamedTuple
class, ensure__set_name__
is called on all objects that define__set_name__
and exist in the values
of theNamedTuple
class's class dictionary. Patch by Alex Waygood,
backporting python/cpython#111876. - Improve the error message when trying to call
issubclass()
against a
Protocol
that has non-method members. Patch by Alex Waygood (backporting
python/cpython#112344, by Randolph Scholz).
4.8.0
Changes since 4.7.1:
- Add
typing_extensions.Doc
, as proposed by PEP 727. Patch by
Sebastiรกn Ramรญrez. - Drop support for Python 3.7 (including PyPy-3.7). Patch by Alex Waygood.
- Fix bug where
get_original_bases()
would return incorrect results when
called on a concrete subclass of a generic class. Patch by Alex Waygood
(backporting python/cpython#107584, by James
Hilton-Balfe). - Fix bug where
ParamSpec(default=...)
would raise aTypeError
on Python
versions <3.11. Patch by James Hilton-Balfe
No changes since 4.8.0rc1.
4.8.0rc1
- Add
typing_extensions.Doc
, as proposed by PEP 727. Patch by
Sebastiรกn Ramรญrez. - Drop support for Python 3.7 (including PyPy-3.7). Patch by Alex Waygood.
- Fix bug where
get_original_bases()
would return incorrect results when
called on a concrete subclass of a generic class. Patch by Alex Waygood
(backporting python/cpython#107584, by James
Hilton-Balfe). - Fix bug where
ParamSpec(default=...)
would raise aTypeError
on Python
versions <3.11. Patch by James Hilton-Balfe
4.7.1
- Fix support for
TypedDict
,NamedTuple
andis_protocol
on PyPy-3.7 and
PyPy-3.8. Patch by Alex Waygood. Note that PyPy-3.7 and PyPy-3.8 are unsupported
by the PyPy project. The next feature release of typing-extensions will
drop support for PyPy-3.7 and may also drop support for PyPy-3.8.
4.7.0
This is a feature release. Major changes include:
- All non-deprecated names from
typing
are now re-exported bytyping_extensions
for convenience - Add
typing_extensions.get_protocol_members
andtyping_extensions.is_protocol
- Declare support for Python 3.12
- This will be the last feature release to support Python 3.7, which recently reached its end-of-life
Full changelog of versions 4.7.0 and 4.7.0rc1:
Release 4.7.0 (June 28, 2023)
- This is expected to be the last feature release supporting Python 3.7,
which reaches its end of life on June 27, 2023. Version 4.8.0 will support
only Python 3.8.0 and up. - Fix bug where a
typing_extensions.Protocol
class that had one or more
non-callable members would raiseTypeError
whenissubclass()
was called against it, even if it defined a custom__subclasshook__
method. The correct behaviour -- which has now been restored -- is not to
raiseTypeError
in these situations if a custom__subclasshook__
method
is defined. Patch by Alex Waygood (backporting
python/cpython#105976).
Release 4.7.0rc1 (June 21, 2023)
- Add
typing_extensions.get_protocol_members
and
typing_extensions.is_protocol
(backport of CPython PR #104878).
Patch by Jelle Zijlstra. typing_extensions
now re-exports all names in the standard library's
typing
module, except the deprecatedByteString
. Patch by Jelle
Zijlstra.- Due to changes in the implementation of
typing_extensions.Protocol
,
typing.runtime_checkable
can now be used ontyping_extensions.Protocol
(previously, users had to usetyping_extensions.runtime_checkable
if they
were usingtyping_extensions.Protocol
). - Align the implementation of
TypedDict
with the implementation in the
standard library on Python 3.9 and higher.
typing_extensions.TypedDict
is now a function instead of a class. The
private functions_check_fails
,_dict_new
, and_typeddict_new
have been removed.is_typeddict
now returnsFalse
when called with
TypedDict
itself as the argument. Patch by Jelle Zijlstra. - Declare support for Python 3.12. Patch by Jelle Zijlstra.
- Fix tests on Python 3.13, which removes support for creating
TypedDict
classes through the keyword-argument syntax. Patch by
Jelle Zijlstra. - Fix a regression introduced in v4.6.3 that meant that
issubclass(object, typing_extensions.Protocol)
would erroneously raise
TypeError
. Patch by Alex Waygood (backporting the CPython PR
python/cpython#105239). - Allow
Protocol
classes to inherit fromtyping_extensions.Buffer
or
collections.abc.Buffer
. Patch by Alex Waygood (backporting
python/cpython#104827, by Jelle Zijlstra). - Allow classes to inherit from both
typing.Protocol
andtyping_extensions.Protocol
simultaneously. Since v4.6.0, this causedTypeError
to be raised due to a
metaclass conflict. Patch by Alex Waygood. - Backport several deprecations from CPython relating to unusual ways to
createTypedDict
s andNamedTuple
s. CPython PRs #105609 and #105780
by Alex Waygood;typing_extensions
backport by Jelle Zijlstra.- Creating a
NamedTuple
using the functional syntax with keyword arguments
(NT = NamedTuple("NT", a=int)
) is now deprecated. - Creating a
NamedTuple
with zero fields using the syntaxNT = NamedTuple("NT")
orNT = NamedTuple("NT", None)
is now deprecated. - Creating a
TypedDict
with zero fields using the syntaxTD = TypedDict("TD")
orTD = TypedDict("TD", None)
is now deprecated.
- Creating a
- Fix bug on Python 3.7 where a protocol
X
that had a membera
would not be
considered an implicit subclass of an unrelated protocolY
that only has a
membera
. Where the members ofX
are a superset of the members ofY
,
X
should always be considered a subclass ofY
iffY
is a
runtime-checkable protocol that only has callable members. Patch by Alex
Waygood (backporting CPython PR
python/cpython#105835).
4.7.0rc1
This is a pre-release; please test it! 4.7.0 final is expected in one week (June 28).
Changelog:
- Add
typing_extensions.get_protocol_members
and
typing_extensions.is_protocol
(backport of CPython PR #104878).
Patch by Jelle Zijlstra. typing_extensions
now re-exports all names in the standard library's
typing
module, except the deprecatedByteString
. Patch by Jelle
Zijlstra.- Due to changes in the implementation of
typing_extensions.Protocol
,
typing.runtime_checkable
can now be used ontyping_extensions.Protocol
(previously, users had to usetyping_extensions.runtime_checkable
if they
were usingtyping_extensions.Protocol
). - Align the implementation of
TypedDict
with the implementation in the
standard library on Python 3.9 and higher.
typing_extensions.TypedDict
is now a function instead of a class. The
private functions_check_fails
,_dict_new
, and_typeddict_new
have been removed.is_typeddict
now returnsFalse
when called with
TypedDict
itself as the argument. Patch by Jelle Zijlstra. - Declare support for Python 3.12. Patch by Jelle Zijlstra.
- Fix tests on Python 3.13, which removes support for creating
TypedDict
classes through the keyword-argument syntax. Patch by
Jelle Zijlstra. - Fix a regression introduced in v4.6.3 that meant that
issubclass(object, typing_extensions.Protocol)
would erroneously raise
TypeError
. Patch by Alex Waygood (backporting the CPython PR
python/cpython#105239). - Allow
Protocol
classes to inherit fromtyping_extensions.Buffer
or
collections.abc.Buffer
. Patch by Alex Waygood (backporting
python/cpython#104827, by Jelle Zijlstra). - Allow classes to inherit from both
typing.Protocol
andtyping_extensions.Protocol
simultaneously. Since v4.6.0, this causedTypeError
to be raised due to a
metaclass conflict. Patch by Alex Waygood. - Backport several deprecations from CPython relating to unusual ways to
createTypedDict
s andNamedTuple
s. CPython PRs #105609 and #105780
by Alex Waygood;typing_extensions
backport by Jelle Zijlstra.- Creating a
NamedTuple
using the functional syntax with keyword arguments
(NT = NamedTuple("NT", a=int)
) is now deprecated. - Creating a
NamedTuple
with zero fields using the syntaxNT = NamedTuple("NT")
orNT = NamedTuple("NT", None)
is now deprecated. - Creating a
TypedDict
with zero fields using the syntaxTD = TypedDict("TD")
orTD = TypedDict("TD", None)
is now deprecated.
- Creating a
- Fix bug on Python 3.7 where a protocol
X
that had a membera
would not be
considered an implicit subclass of an unrelated protocolY
that only has a
membera
. Where the members ofX
are a superset of the members ofY
,
X
should always be considered a subclass ofY
iffY
is a
runtime-checkable protocol that only has callable members. Patch by Alex
Waygood (backporting CPython PR
python/cpython#105835).