mirror of
https://github.com/python/cpython.git
synced 2025-12-08 06:10:17 +00:00
gh-133601: Remove deprecated typing.no_type_check_decorator (#133602)
This commit is contained in:
parent
a752f58d6b
commit
e09837fcbf
8 changed files with 8 additions and 66 deletions
|
|
@ -92,7 +92,7 @@ Pending removal in Python 3.15
|
||||||
Use ``class TD(TypedDict): pass`` or ``TD = TypedDict("TD", {})``
|
Use ``class TD(TypedDict): pass`` or ``TD = TypedDict("TD", {})``
|
||||||
to create a TypedDict with zero field.
|
to create a TypedDict with zero field.
|
||||||
|
|
||||||
* 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.
|
has been deprecated since Python 3.13.
|
||||||
After eight years in the :mod:`typing` module,
|
After eight years in the :mod:`typing` module,
|
||||||
it has yet to be supported by any major type checker.
|
it has yet to be supported by any major type checker.
|
||||||
|
|
|
||||||
|
|
@ -3258,17 +3258,6 @@ Functions and decorators
|
||||||
|
|
||||||
``@no_type_check`` mutates the decorated object in place.
|
``@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:: override
|
||||||
|
|
||||||
Decorator to indicate that a method in a subclass is intended to override a
|
Decorator to indicate that a method in a subclass is intended to override a
|
||||||
|
|
@ -4114,10 +4103,6 @@ convenience. This is subject to change, and not all deprecations are listed.
|
||||||
- 3.12
|
- 3.12
|
||||||
- Undecided
|
- Undecided
|
||||||
- :pep:`695`
|
- :pep:`695`
|
||||||
* - :func:`@typing.no_type_check_decorator <no_type_check_decorator>`
|
|
||||||
- 3.13
|
|
||||||
- 3.15
|
|
||||||
- :gh:`106309`
|
|
||||||
* - :data:`typing.AnyStr`
|
* - :data:`typing.AnyStr`
|
||||||
- 3.13
|
- 3.13
|
||||||
- 3.18
|
- 3.18
|
||||||
|
|
|
||||||
|
|
@ -1993,7 +1993,7 @@ New Deprecations
|
||||||
use ``class TD(TypedDict): pass`` or ``TD = TypedDict("TD", {})``.
|
use ``class TD(TypedDict): pass`` or ``TD = TypedDict("TD", {})``.
|
||||||
(Contributed by Alex Waygood in :gh:`105566` and :gh:`105570`.)
|
(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 Python 3.15.
|
to be removed in Python 3.15.
|
||||||
After eight years in the :mod:`typing` module,
|
After eight years in the :mod:`typing` module,
|
||||||
it has yet to be supported by any major type checker.
|
it has yet to be supported by any major type checker.
|
||||||
|
|
|
||||||
|
|
@ -764,6 +764,9 @@ typing
|
||||||
:func:`issubclass`, but warnings were not previously emitted if it was merely
|
:func:`issubclass`, but warnings were not previously emitted if it was merely
|
||||||
imported or accessed from the :mod:`!typing` module.
|
imported or accessed from the :mod:`!typing` module.
|
||||||
|
|
||||||
|
* Deprecated :func:`!typing.no_type_check_decorator` has been removed.
|
||||||
|
(Contributed by Nikita Sobolev in :gh:`133601`.)
|
||||||
|
|
||||||
|
|
||||||
unicodedata
|
unicodedata
|
||||||
-----------
|
-----------
|
||||||
|
|
|
||||||
|
|
@ -33,7 +33,7 @@
|
||||||
from typing import is_typeddict, is_protocol
|
from typing import is_typeddict, is_protocol
|
||||||
from typing import reveal_type
|
from typing import reveal_type
|
||||||
from typing import dataclass_transform
|
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 Type
|
||||||
from typing import NamedTuple, NotRequired, Required, ReadOnly, TypedDict, NoExtraItems
|
from typing import NamedTuple, NotRequired, Required, ReadOnly, TypedDict, NoExtraItems
|
||||||
from typing import IO, TextIO, BinaryIO
|
from typing import IO, TextIO, BinaryIO
|
||||||
|
|
@ -6376,35 +6376,6 @@ class F:
|
||||||
for clazz in [C, D, E, F]:
|
for clazz in [C, D, E, F]:
|
||||||
self.assertEqual(get_type_hints(clazz), expected_result)
|
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):
|
class InternalsTests(BaseTestCase):
|
||||||
def test_collect_parameters(self):
|
def test_collect_parameters(self):
|
||||||
|
|
|
||||||
|
|
@ -139,7 +139,6 @@
|
||||||
'Never',
|
'Never',
|
||||||
'NewType',
|
'NewType',
|
||||||
'no_type_check',
|
'no_type_check',
|
||||||
'no_type_check_decorator',
|
|
||||||
'NoDefault',
|
'NoDefault',
|
||||||
'NoExtraItems',
|
'NoExtraItems',
|
||||||
'NoReturn',
|
'NoReturn',
|
||||||
|
|
@ -2623,23 +2622,6 @@ def no_type_check(arg):
|
||||||
return 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):
|
def _overload_dummy(*args, **kwds):
|
||||||
"""Helper for @overload to raise when called."""
|
"""Helper for @overload to raise when called."""
|
||||||
raise NotImplementedError(
|
raise NotImplementedError(
|
||||||
|
|
|
||||||
|
|
@ -3426,7 +3426,7 @@ This bug was introduced in Python 3.12.0 beta 1.
|
||||||
.. nonce: hSlB17
|
.. nonce: hSlB17
|
||||||
.. section: Library
|
.. 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.
|
added support for this decorator. Patch by Alex Waygood.
|
||||||
|
|
||||||
..
|
..
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
Remove deprecated :func:`!typing.no_type_check_decorator`.
|
||||||
Loading…
Add table
Add a link
Reference in a new issue