]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-94912: Adjusted check for non-standard coroutine function marker. (#100935)
authorCarlton Gibson <carlton.gibson@noumenal.es>
Wed, 11 Jan 2023 21:17:26 +0000 (22:17 +0100)
committerGitHub <noreply@github.com>
Wed, 11 Jan 2023 21:17:26 +0000 (13:17 -0800)
The initial implementation did not correctly identify explicitly
marked class instances.

Follow up to 532aa4e4e019812d0388920768ede7c04232ebe1

Lib/inspect.py
Lib/test/test_inspect.py

index 3db7745e8a5eeb39af81bb1ab449773b0a749c7a..8bb3a375735af6ac586979d37613e2f1d8685065 100644 (file)
@@ -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):
index aa757241aca9e19d2944dd0ccaa76c90f691343e..92aba519d28a0850bdaa1ec6716cd2da112cd61a 100644 (file)
@@ -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