Skip to content

Commit b199c2a

Browse files
committed
Fix async generator for python 3.5
1 parent 48aa00f commit b199c2a

File tree

2 files changed

+20
-11
lines changed

2 files changed

+20
-11
lines changed

pytest_trio/plugin.py

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ def isasyncgenfunction(x):
1313
import trio
1414
from trio._util import acontextmanager
1515
from trio.testing import MockClock, trio_test
16+
from async_generator import async_generator, yield_
1617

1718

1819
def pytest_configure(config):
@@ -61,29 +62,31 @@ async def _bootstrap_fixture_and_run_test(**kwargs):
6162

6263

6364
@acontextmanager
65+
@async_generator
6466
async def _setup_async_fixtures_in(deps):
6567
__tracebackhide__ = True
6668

6769
need_resolved_deps_stack = [(k, v) for k, v in deps.items()
6870
if isinstance(v, BaseAsyncFixture)]
6971

7072
if not need_resolved_deps_stack:
71-
yield deps
73+
await yield_(deps)
7274
return
7375

7476
@acontextmanager
77+
@async_generator
7578
async def _recursive_setup(deps_stack):
7679
__tracebackhide__ = True
7780
name, dep = deps_stack.pop()
7881
async with dep.setup() as resolved:
7982
if not deps_stack:
80-
yield [(name, resolved)]
83+
await yield_([(name, resolved)])
8184
else:
8285
async with _recursive_setup(deps_stack) as remains_deps_stack_resolved:
83-
yield remains_deps_stack_resolved + [(name, resolved)]
86+
await yield_(remains_deps_stack_resolved + [(name, resolved)])
8487

8588
async with _recursive_setup(need_resolved_deps_stack) as resolved_deps_stack:
86-
yield {**deps, **dict(resolved_deps_stack)}
89+
await yield_({**deps, **dict(resolved_deps_stack)})
8790

8891

8992
class BaseAsyncFixture:
@@ -98,15 +101,16 @@ def __init__(self, fixturedef, deps={}):
98101
self.result = None
99102

100103
@acontextmanager
104+
@async_generator
101105
async def setup(self):
102106
__tracebackhide__ = True
103107
if self.setup_done:
104-
yield self.result
108+
await yield_(self.result)
105109
else:
106110
async with _setup_async_fixtures_in(self.deps) as resolved_deps:
107111
async with self._setup(resolved_deps) as self.result:
108112
self.setup_done = True
109-
yield self.result
113+
await yield_(self.result)
110114

111115
async def _setup(self):
112116
raise NotImplementedError()
@@ -118,11 +122,12 @@ class AsyncYieldFixture(BaseAsyncFixture):
118122
"""
119123

120124
@acontextmanager
125+
@async_generator
121126
async def _setup(self, resolved_deps):
122127
__tracebackhide__ = True
123128
agen = self.fixturedef.func(**resolved_deps)
124129

125-
yield await agen.asend(None)
130+
await yield_(await agen.asend(None))
126131

127132
try:
128133
await agen.asend(None)
@@ -138,9 +143,10 @@ class SyncFixtureWithAsyncDeps(BaseAsyncFixture):
138143
"""
139144

140145
@acontextmanager
146+
@async_generator
141147
async def _setup(self, resolved_deps):
142148
__tracebackhide__ = True
143-
yield self.fixturedef.func(**resolved_deps)
149+
await yield_(self.fixturedef.func(**resolved_deps))
144150

145151

146152
class SyncYieldFixtureWithAsyncDeps(BaseAsyncFixture):
@@ -149,11 +155,12 @@ class SyncYieldFixtureWithAsyncDeps(BaseAsyncFixture):
149155
"""
150156

151157
@acontextmanager
158+
@async_generator
152159
async def _setup(self, resolved_deps):
153160
__tracebackhide__ = True
154161
gen = self.fixturedef.func(**resolved_deps)
155162

156-
yield gen.send(None)
163+
await yield_(gen.send(None))
157164

158165
try:
159166
gen.send(None)
@@ -169,9 +176,10 @@ class AsyncFixture(BaseAsyncFixture):
169176
"""
170177

171178
@acontextmanager
179+
@async_generator
172180
async def _setup(self, resolved_deps):
173181
__tracebackhide__ = True
174-
yield await self.fixturedef.func(**resolved_deps)
182+
await yield_(await self.fixturedef.func(**resolved_deps))
175183

176184

177185
def _install_async_fixture_if_needed(fixturedef, request):

setup.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,10 @@
1414
author_email="[email protected]",
1515
license="MIT -or- Apache License 2.0",
1616
packages=find_packages(),
17-
entry_points={'pytest11': ['trio = pytest_trio.plugin',]},
17+
entry_points={'pytest11': ['trio = pytest_trio.plugin']},
1818
install_requires=[
1919
"trio",
20+
"async_generator >= 1.6",
2021
],
2122
keywords=[
2223
'async',

0 commit comments

Comments
 (0)