Open
Description
I hoped to be able to do the following for my test cases requiring trio-asyncio
:
@pytest_trio.trio_fixture
async def trio_aio_loop():
async with trio_asyncio.open_loop() as loop:
yield loop
@pytest.mark.trio
async def test_aio_funcs(trio_aio_loop, autojump_clock):
@trio_asyncio.aio_as_trio
async def func():
await asyncio.sleep(0.1)
return 1
assert await func() == 1
However the fixture blows up:
test setup failed
@pytest_trio.trio_fixture
async def trio_aio_loop():
> async with trio_asyncio.open_loop() as loop:
tests/test_loop.py:261:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
.../env/lib/python3.7/site-packages/async_generator/_util.py:34: in __aenter__
return await self._agen.asend(None)
.../env/lib/python3.7/site-packages/async_generator/_impl.py:366: in step
return await ANextIter(self._it, start_fn, *args)
.../env/lib/python3.7/site-packages/async_generator/_impl.py:197: in __next__
return self._invoke(first_fn, *first_args)
.../env/lib/python3.7/site-packages/async_generator/_impl.py:209: in _invoke
result = fn(*args)
.../env/lib/python3.7/site-packages/trio_asyncio/async_.py:108: in open_loop
async with trio.open_nursery() as nursery:
.../env/lib/python3.7/site-packages/trio/_core/_run.py:378: in __aenter__
self._scope = CancelScope._create(deadline=inf, shield=False)
.../env/lib/python3.7/site-packages/trio/_core/_run.py:130: in _create
task = _core.current_task()
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
def current_task():
"""Return the :class:`Task` object representing the current task.
Returns:
Task: the :class:`Task` that called :func:`current_task`.
"""
try:
return GLOBAL_RUN_CONTEXT.task
except AttributeError:
> raise RuntimeError("must be called from async context") from None
E RuntimeError: must be called from async context
.../env/lib/python3.7/site-packages/trio/_core/_run.py:1534: RuntimeError
I assume that has to do something with the description of fixture handling here (I admit not having read it in full). It seems rather intricate, so I have no idea how hard this would be to fix. I think it would be a valuable addition, though.
Metadata
Metadata
Assignees
Labels
No labels