Skip to content

gh-133601: Remove deprecated typing.no_type_check_decorator #133602

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Doc/deprecations/pending-removal-in-3.15.rst
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ Pending removal in Python 3.15
has been deprecated since Python 3.13.
Use the class-based syntax or the functional syntax instead.

* The :func:`typing.no_type_check_decorator` decorator function
* The :func:`!typing.no_type_check_decorator` decorator function
has been deprecated since Python 3.13.
After eight years in the :mod:`typing` module,
it has yet to be supported by any major type checker.
Expand Down
15 changes: 0 additions & 15 deletions Doc/library/typing.rst
Original file line number Diff line number Diff line change
Expand Up @@ -3257,17 +3257,6 @@ Functions and decorators

``@no_type_check`` mutates the decorated object in place.

.. decorator:: no_type_check_decorator

Decorator to give another decorator the :func:`no_type_check` effect.

This wraps the decorator with something that wraps the decorated
function in :func:`no_type_check`.

.. deprecated-removed:: 3.13 3.15
No type checker ever added support for ``@no_type_check_decorator``. It
is therefore deprecated, and will be removed in Python 3.15.

.. decorator:: override

Decorator to indicate that a method in a subclass is intended to override a
Expand Down Expand Up @@ -4081,10 +4070,6 @@ convenience. This is subject to change, and not all deprecations are listed.
- 3.12
- Undecided
- :pep:`695`
* - :func:`@typing.no_type_check_decorator <no_type_check_decorator>`
- 3.13
- 3.15
- :gh:`106309`
* - :data:`typing.AnyStr`
- 3.13
- 3.18
Expand Down
2 changes: 1 addition & 1 deletion Doc/whatsnew/3.13.rst
Original file line number Diff line number Diff line change
Expand Up @@ -1979,7 +1979,7 @@ New Deprecations
use ``class TD(TypedDict): pass`` or ``TD = TypedDict("TD", {})``.
(Contributed by Alex Waygood in :gh:`105566` and :gh:`105570`.)

* Deprecate the :func:`typing.no_type_check_decorator` decorator function,
* Deprecate the :func:`!typing.no_type_check_decorator` decorator function,
to be removed in in Python 3.15.
After eight years in the :mod:`typing` module,
it has yet to be supported by any major type checker.
Expand Down
31 changes: 1 addition & 30 deletions Lib/test/test_typing.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
from typing import is_typeddict, is_protocol
from typing import reveal_type
from typing import dataclass_transform
from typing import no_type_check, no_type_check_decorator
from typing import no_type_check
from typing import Type
from typing import NamedTuple, NotRequired, Required, ReadOnly, TypedDict
from typing import IO, TextIO, BinaryIO
Expand Down Expand Up @@ -6273,35 +6273,6 @@ class F:
for clazz in [C, D, E, F]:
self.assertEqual(get_type_hints(clazz), expected_result)

def test_meta_no_type_check(self):
depr_msg = (
"'typing.no_type_check_decorator' is deprecated "
"and slated for removal in Python 3.15"
)
with self.assertWarnsRegex(DeprecationWarning, depr_msg):
@no_type_check_decorator
def magic_decorator(func):
return func

self.assertEqual(magic_decorator.__name__, 'magic_decorator')

@magic_decorator
def foo(a: 'whatevers') -> {}:
pass

@magic_decorator
class C:
def foo(a: 'whatevers') -> {}:
pass

self.assertEqual(foo.__name__, 'foo')
th = get_type_hints(foo)
self.assertEqual(th, {})
cth = get_type_hints(C.foo)
self.assertEqual(cth, {})
ith = get_type_hints(C().foo)
self.assertEqual(ith, {})


class InternalsTests(BaseTestCase):
def test_deprecation_for_no_type_params_passed_to__evaluate(self):
Expand Down
18 changes: 0 additions & 18 deletions Lib/typing.py
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,6 @@
'Never',
'NewType',
'no_type_check',
'no_type_check_decorator',
'NoDefault',
'NoReturn',
'NotRequired',
Expand Down Expand Up @@ -2551,23 +2550,6 @@ def no_type_check(arg):
return arg


def no_type_check_decorator(decorator):
"""Decorator to give another decorator the @no_type_check effect.

This wraps the decorator with something that wraps the decorated
function in @no_type_check.
"""
import warnings
warnings._deprecated("typing.no_type_check_decorator", remove=(3, 15))
@functools.wraps(decorator)
def wrapped_decorator(*args, **kwds):
func = decorator(*args, **kwds)
func = no_type_check(func)
return func

return wrapped_decorator


def _overload_dummy(*args, **kwds):
"""Helper for @overload to raise when called."""
raise NotImplementedError(
Expand Down
2 changes: 1 addition & 1 deletion Misc/NEWS.d/3.13.0a1.rst
Original file line number Diff line number Diff line change
Expand Up @@ -3426,7 +3426,7 @@ This bug was introduced in Python 3.12.0 beta 1.
.. nonce: hSlB17
.. section: Library

Deprecate :func:`typing.no_type_check_decorator`. No major type checker ever
Deprecate :func:`!typing.no_type_check_decorator`. No major type checker ever
added support for this decorator. Patch by Alex Waygood.

..
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Remove deprecated :func:`!typing.no_type_check_decorator`.
Loading