From: Carlton Gibson Date: Wed, 11 Jan 2023 21:17:26 +0000 (+0100) Subject: gh-94912: Adjusted check for non-standard coroutine function marker. (#100935) X-Git-Tag: v3.12.0a5~201 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=07a87f74faf31cdd755ac7de6d44531139899d1b;p=thirdparty%2FPython%2Fcpython.git gh-94912: Adjusted check for non-standard coroutine function marker. (#100935) The initial implementation did not correctly identify explicitly marked class instances. Follow up to 532aa4e4e019812d0388920768ede7c04232ebe1 --- diff --git a/Lib/inspect.py b/Lib/inspect.py index 3db7745e8a5e..8bb3a375735a 100644 --- a/Lib/inspect.py +++ b/Lib/inspect.py @@ -399,8 +399,6 @@ def _has_coroutine_mark(f): while ismethod(f): f = f.__func__ f = functools._unwrap_partial(f) - if not (isfunction(f) or _signature_is_functionlike(f)): - return False return getattr(f, "_is_coroutine_marker", None) is _is_coroutine_marker def markcoroutinefunction(func): diff --git a/Lib/test/test_inspect.py b/Lib/test/test_inspect.py index aa757241aca9..92aba519d28a 100644 --- a/Lib/test/test_inspect.py +++ b/Lib/test/test_inspect.py @@ -223,6 +223,10 @@ class TestPredicates(IsTestBase): self.assertFalse(inspect.iscoroutinefunction(Cl)) # instances with async def __call__ are NOT recognised. self.assertFalse(inspect.iscoroutinefunction(Cl())) + # unless explicitly marked. + self.assertTrue(inspect.iscoroutinefunction( + inspect.markcoroutinefunction(Cl()) + )) class Cl2: @inspect.markcoroutinefunction @@ -232,6 +236,10 @@ class TestPredicates(IsTestBase): self.assertFalse(inspect.iscoroutinefunction(Cl2)) # instances with marked __call__ are NOT recognised. self.assertFalse(inspect.iscoroutinefunction(Cl2())) + # unless explicitly marked. + self.assertTrue(inspect.iscoroutinefunction( + inspect.markcoroutinefunction(Cl2()) + )) class Cl3: @inspect.markcoroutinefunction