mirror of
https://github.com/python/cpython.git
synced 2025-07-24 11:44:31 +00:00
bpo-34890: Make iscoroutinefunction, isgeneratorfunction and isasyncgenfunction work with functools.partial (GH-9903)
inspect.isfunction() processes both inspect.isfunction(func) and inspect.isfunction(partial(func, arg)) correctly but some other functions in the inspect module (iscoroutinefunction, isgeneratorfunction and isasyncgenfunction) lack this functionality. This commits adds a new check in the mentioned functions in the inspect module so they can work correctly with arbitrarily nested partial functions.
This commit is contained in:
parent
e483f02423
commit
7cd2543416
6 changed files with 61 additions and 12 deletions
|
@ -166,26 +166,51 @@ class TestPredicates(IsTestBase):
|
|||
self.assertFalse(inspect.ismemberdescriptor(datetime.timedelta.days))
|
||||
|
||||
def test_iscoroutine(self):
|
||||
async_gen_coro = async_generator_function_example(1)
|
||||
gen_coro = gen_coroutine_function_example(1)
|
||||
coro = coroutine_function_example(1)
|
||||
|
||||
self.assertFalse(
|
||||
inspect.iscoroutinefunction(gen_coroutine_function_example))
|
||||
self.assertFalse(
|
||||
inspect.iscoroutinefunction(
|
||||
functools.partial(functools.partial(
|
||||
gen_coroutine_function_example))))
|
||||
self.assertFalse(inspect.iscoroutine(gen_coro))
|
||||
|
||||
self.assertTrue(
|
||||
inspect.isgeneratorfunction(gen_coroutine_function_example))
|
||||
self.assertTrue(
|
||||
inspect.isgeneratorfunction(
|
||||
functools.partial(functools.partial(
|
||||
gen_coroutine_function_example))))
|
||||
self.assertTrue(inspect.isgenerator(gen_coro))
|
||||
|
||||
self.assertTrue(
|
||||
inspect.iscoroutinefunction(coroutine_function_example))
|
||||
self.assertTrue(
|
||||
inspect.iscoroutinefunction(
|
||||
functools.partial(functools.partial(
|
||||
coroutine_function_example))))
|
||||
self.assertTrue(inspect.iscoroutine(coro))
|
||||
|
||||
self.assertFalse(
|
||||
inspect.isgeneratorfunction(coroutine_function_example))
|
||||
self.assertFalse(
|
||||
inspect.isgeneratorfunction(
|
||||
functools.partial(functools.partial(
|
||||
coroutine_function_example))))
|
||||
self.assertFalse(inspect.isgenerator(coro))
|
||||
|
||||
coro.close(); gen_coro.close() # silence warnings
|
||||
self.assertTrue(
|
||||
inspect.isasyncgenfunction(async_generator_function_example))
|
||||
self.assertTrue(
|
||||
inspect.isasyncgenfunction(
|
||||
functools.partial(functools.partial(
|
||||
async_generator_function_example))))
|
||||
self.assertTrue(inspect.isasyncgen(async_gen_coro))
|
||||
|
||||
coro.close(); gen_coro.close(); # silence warnings
|
||||
|
||||
def test_isawaitable(self):
|
||||
def gen(): yield
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue