mirror of
https://github.com/python/cpython.git
synced 2024-11-23 01:45:25 +08:00
gh-122088: Copy the coroutine status of the underlying callable in @warnings.deprecated
(#122086)
Co-authored-by: Bénédikt Tran <10796600+picnixz@users.noreply.github.com>
This commit is contained in:
parent
2a5d1eb707
commit
375c9f6dfb
@ -1,6 +1,7 @@
|
||||
from contextlib import contextmanager
|
||||
import linecache
|
||||
import os
|
||||
import inspect
|
||||
from io import StringIO
|
||||
import re
|
||||
import sys
|
||||
@ -1684,6 +1685,29 @@ class DeprecatedTests(unittest.TestCase):
|
||||
isinstance(cell.cell_contents, deprecated) for cell in d.__closure__
|
||||
))
|
||||
|
||||
def test_inspect(self):
|
||||
@deprecated("depr")
|
||||
def sync():
|
||||
pass
|
||||
|
||||
@deprecated("depr")
|
||||
async def coro():
|
||||
pass
|
||||
|
||||
class Cls:
|
||||
@deprecated("depr")
|
||||
def sync(self):
|
||||
pass
|
||||
|
||||
@deprecated("depr")
|
||||
async def coro(self):
|
||||
pass
|
||||
|
||||
self.assertFalse(inspect.iscoroutinefunction(sync))
|
||||
self.assertTrue(inspect.iscoroutinefunction(coro))
|
||||
self.assertFalse(inspect.iscoroutinefunction(Cls.sync))
|
||||
self.assertTrue(inspect.iscoroutinefunction(Cls.coro))
|
||||
|
||||
def setUpModule():
|
||||
py_warnings.onceregistry.clear()
|
||||
c_warnings.onceregistry.clear()
|
||||
|
@ -628,12 +628,16 @@ class deprecated:
|
||||
return arg
|
||||
elif callable(arg):
|
||||
import functools
|
||||
import inspect
|
||||
|
||||
@functools.wraps(arg)
|
||||
def wrapper(*args, **kwargs):
|
||||
warn(msg, category=category, stacklevel=stacklevel + 1)
|
||||
return arg(*args, **kwargs)
|
||||
|
||||
if inspect.iscoroutinefunction(arg):
|
||||
wrapper = inspect.markcoroutinefunction(wrapper)
|
||||
|
||||
arg.__deprecated__ = wrapper.__deprecated__ = msg
|
||||
return wrapper
|
||||
else:
|
||||
|
@ -0,0 +1,3 @@
|
||||
:func:`@warnings.deprecated <warnings.deprecated>` now copies the
|
||||
coroutine status of functions and methods so that
|
||||
:func:`inspect.iscoroutinefunction` returns the correct result.
|
Loading…
Reference in New Issue
Block a user