From 07a87f74faf31cdd755ac7de6d44531139899d1b Mon Sep 17 00:00:00 2001 From: Carlton Gibson Date: Wed, 11 Jan 2023 22:17:26 +0100 Subject: [PATCH] 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 --- Lib/inspect.py | 2 -- Lib/test/test_inspect.py | 8 ++++++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/Lib/inspect.py b/Lib/inspect.py index 3db7745e8a5..8bb3a375735 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 aa757241aca..92aba519d28 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