mirror of
https://github.com/ets-labs/python-dependency-injector.git
synced 2025-02-12 09:30:46 +03:00
Improve coroutine provider tests
This commit is contained in:
parent
1b465da998
commit
bf9953a301
|
@ -1,6 +1,7 @@
|
||||||
"""Dependency injector coroutine providers unit tests."""
|
"""Dependency injector coroutine providers unit tests."""
|
||||||
|
|
||||||
import asyncio
|
import asyncio
|
||||||
|
from asyncio import coroutines, events, tasks
|
||||||
|
|
||||||
import unittest2 as unittest
|
import unittest2 as unittest
|
||||||
|
|
||||||
|
@ -18,9 +19,48 @@ def _example(arg1, arg2, arg3, arg4):
|
||||||
return arg1, arg2, arg3, arg4
|
return arg1, arg2, arg3, arg4
|
||||||
|
|
||||||
|
|
||||||
def _run(coro):
|
def _run(coro, debug=False):
|
||||||
loop = asyncio.get_event_loop()
|
if events._get_running_loop() is not None:
|
||||||
return loop.run_until_complete(coro)
|
raise RuntimeError(
|
||||||
|
"asyncio.run() cannot be called from a running event loop")
|
||||||
|
|
||||||
|
if not coroutines.iscoroutine(coro):
|
||||||
|
raise ValueError("a coroutine was expected, got {!r}".format(coro))
|
||||||
|
|
||||||
|
loop = events.new_event_loop()
|
||||||
|
try:
|
||||||
|
events.set_event_loop(loop)
|
||||||
|
loop.set_debug(debug)
|
||||||
|
return loop.run_until_complete(coro)
|
||||||
|
finally:
|
||||||
|
try:
|
||||||
|
_cancel_all_tasks(loop)
|
||||||
|
loop.run_until_complete(loop.shutdown_asyncgens())
|
||||||
|
finally:
|
||||||
|
events.set_event_loop(None)
|
||||||
|
loop.close()
|
||||||
|
|
||||||
|
|
||||||
|
def _cancel_all_tasks(loop):
|
||||||
|
to_cancel = tasks.all_tasks(loop)
|
||||||
|
if not to_cancel:
|
||||||
|
return
|
||||||
|
|
||||||
|
for task in to_cancel:
|
||||||
|
task.cancel()
|
||||||
|
|
||||||
|
loop.run_until_complete(
|
||||||
|
tasks.gather(*to_cancel, loop=loop, return_exceptions=True))
|
||||||
|
|
||||||
|
for task in to_cancel:
|
||||||
|
if task.cancelled():
|
||||||
|
continue
|
||||||
|
if task.exception() is not None:
|
||||||
|
loop.call_exception_handler({
|
||||||
|
'message': 'unhandled exception during asyncio.run() shutdown',
|
||||||
|
'exception': task.exception(),
|
||||||
|
'task': task,
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
class CoroutineTests(unittest.TestCase):
|
class CoroutineTests(unittest.TestCase):
|
||||||
|
|
Loading…
Reference in New Issue
Block a user