Skip to content

4.7.0rc1

Compare
Choose a tag to compare
@JelleZijlstra JelleZijlstra released this 21 Jun 14:59
· 102 commits to main since this release
e69eea0

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 deprecated ByteString. Patch by Jelle
    Zijlstra.
  • Due to changes in the implementation of typing_extensions.Protocol,
    typing.runtime_checkable can now be used on typing_extensions.Protocol
    (previously, users had to use typing_extensions.runtime_checkable if they
    were using typing_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 returns False 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 from typing_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 and typing_extensions.Protocol
    simultaneously. Since v4.6.0, this caused TypeError to be raised due to a
    metaclass conflict. Patch by Alex Waygood.
  • Backport several deprecations from CPython relating to unusual ways to
    create TypedDicts and NamedTuples. 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 syntax NT = NamedTuple("NT")
      or NT = NamedTuple("NT", None) is now deprecated.
    • Creating a TypedDict with zero fields using the syntax TD = TypedDict("TD")
      or TD = TypedDict("TD", None) is now deprecated.
  • Fix bug on Python 3.7 where a protocol X that had a member a would not be
    considered an implicit subclass of an unrelated protocol Y that only has a
    member a. Where the members of X are a superset of the members of Y,
    X should always be considered a subclass of Y iff Y is a
    runtime-checkable protocol that only has callable members. Patch by Alex
    Waygood (backporting CPython PR
    python/cpython#105835).