Deprecate `asyncio.iscoroutinefunction` in favor of `inspect.iscoroutinefunction`.
Co-authored-by: Kumar Aditya <kumaraditya@python.org>
call is an awaitable.
>>> mock = AsyncMock()
- >>> asyncio.iscoroutinefunction(mock)
+ >>> inspect.iscoroutinefunction(mock)
True
>>> inspect.isawaitable(mock()) # doctest: +SKIP
True
:c:macro:`!isfinite` available from :file:`math.h`
since C99. (Contributed by Sergey B Kirpichev in :gh:`119613`.)
+* :func:`!asyncio.iscoroutinefunction` is deprecated
+ and will be removed in Python 3.16,
+ use :func:`inspect.iscoroutinefunction` instead.
+ (Contributed by Jiahao Li and Kumar Aditya in :gh:`122875`.)
+
.. Add deprecations above alphabetically, not here at the end.
.. include:: ../deprecations/c-api-pending-removal-in-3.15.rst
def _check_callback(self, callback, method):
if (coroutines.iscoroutine(callback) or
- coroutines.iscoroutinefunction(callback)):
+ coroutines._iscoroutinefunction(callback)):
raise TypeError(
f"coroutines cannot be used with {method}()")
if not callable(callback):
def iscoroutinefunction(func):
+ import warnings
"""Return True if func is a decorated coroutine function."""
+ warnings._deprecated("asyncio.iscoroutinefunction",
+ f"{warnings._DEPRECATED_MSG}; "
+ "use inspect.iscoroutinefunction() instead",
+ remove=(3,16))
+ return _iscoroutinefunction(func)
+
+
+def _iscoroutinefunction(func):
return (inspect.iscoroutinefunction(func) or
getattr(func, '_is_coroutine', None) is _is_coroutine)
Raise RuntimeError if there is a problem setting up the handler.
"""
if (coroutines.iscoroutine(callback) or
- coroutines.iscoroutinefunction(callback)):
+ coroutines._iscoroutinefunction(callback)):
raise TypeError("coroutines cannot be used "
"with add_signal_handler()")
self._check_signal(sig)
self.assertFalse(asyncio.iscoroutine(foo()))
-
def test_iscoroutinefunction(self):
async def foo(): pass
- self.assertTrue(asyncio.iscoroutinefunction(foo))
+ with self.assertWarns(DeprecationWarning):
+ self.assertTrue(asyncio.iscoroutinefunction(foo))
def test_async_def_coroutines(self):
async def bar():
from test.test_asyncio import utils as test_utils
from test import support
from test.support.script_helper import assert_python_ok
+from test.support.warnings_helper import ignore_warnings
def tearDownModule():
self.assertFalse(task.cancelled())
self.assertIs(task.exception(), base_exc)
+ @ignore_warnings(category=DeprecationWarning)
def test_iscoroutinefunction(self):
def fn():
pass
self.assertFalse(asyncio.iscoroutinefunction(mock.Mock()))
self.assertTrue(asyncio.iscoroutinefunction(mock.AsyncMock()))
+ @ignore_warnings(category=DeprecationWarning)
def test_coroutine_non_gen_function(self):
async def func():
return 'test'
import math
import unittest
import os
-from asyncio import iscoroutinefunction
+from inspect import iscoroutinefunction
from unittest.mock import AsyncMock, Mock, MagicMock, _magics
import sys
import builtins
import pkgutil
-from asyncio import iscoroutinefunction
+from inspect import iscoroutinefunction
import threading
from types import CodeType, ModuleType, MethodType
from unittest.util import safe_repr
recognized as an async function, and the result of a call is an awaitable:
>>> mock = AsyncMock()
- >>> iscoroutinefunction(mock)
+ >>> inspect.iscoroutinefunction(mock)
True
>>> inspect.isawaitable(mock())
True
--- /dev/null
+Deprecate :func:`!asyncio.iscoroutinefunction` in favor of
+:func:`inspect.iscoroutinefunction`.