@@ -13,6 +13,7 @@ def isasyncgenfunction(x):
13
13
import trio
14
14
from trio ._util import acontextmanager
15
15
from trio .testing import MockClock , trio_test
16
+ from async_generator import async_generator , yield_
16
17
17
18
18
19
def pytest_configure (config ):
@@ -61,29 +62,31 @@ async def _bootstrap_fixture_and_run_test(**kwargs):
61
62
62
63
63
64
@acontextmanager
65
+ @async_generator
64
66
async def _setup_async_fixtures_in (deps ):
65
67
__tracebackhide__ = True
66
68
67
69
need_resolved_deps_stack = [(k , v ) for k , v in deps .items ()
68
70
if isinstance (v , BaseAsyncFixture )]
69
71
70
72
if not need_resolved_deps_stack :
71
- yield deps
73
+ await yield_ ( deps )
72
74
return
73
75
74
76
@acontextmanager
77
+ @async_generator
75
78
async def _recursive_setup (deps_stack ):
76
79
__tracebackhide__ = True
77
80
name , dep = deps_stack .pop ()
78
81
async with dep .setup () as resolved :
79
82
if not deps_stack :
80
- yield [(name , resolved )]
83
+ await yield_ ( [(name , resolved )])
81
84
else :
82
85
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 )])
84
87
85
88
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 )})
87
90
88
91
89
92
class BaseAsyncFixture :
@@ -98,15 +101,16 @@ def __init__(self, fixturedef, deps={}):
98
101
self .result = None
99
102
100
103
@acontextmanager
104
+ @async_generator
101
105
async def setup (self ):
102
106
__tracebackhide__ = True
103
107
if self .setup_done :
104
- yield self .result
108
+ await yield_ ( self .result )
105
109
else :
106
110
async with _setup_async_fixtures_in (self .deps ) as resolved_deps :
107
111
async with self ._setup (resolved_deps ) as self .result :
108
112
self .setup_done = True
109
- yield self .result
113
+ await yield_ ( self .result )
110
114
111
115
async def _setup (self ):
112
116
raise NotImplementedError ()
@@ -118,11 +122,12 @@ class AsyncYieldFixture(BaseAsyncFixture):
118
122
"""
119
123
120
124
@acontextmanager
125
+ @async_generator
121
126
async def _setup (self , resolved_deps ):
122
127
__tracebackhide__ = True
123
128
agen = self .fixturedef .func (** resolved_deps )
124
129
125
- yield await agen .asend (None )
130
+ await yield_ ( await agen .asend (None ) )
126
131
127
132
try :
128
133
await agen .asend (None )
@@ -138,9 +143,10 @@ class SyncFixtureWithAsyncDeps(BaseAsyncFixture):
138
143
"""
139
144
140
145
@acontextmanager
146
+ @async_generator
141
147
async def _setup (self , resolved_deps ):
142
148
__tracebackhide__ = True
143
- yield self .fixturedef .func (** resolved_deps )
149
+ await yield_ ( self .fixturedef .func (** resolved_deps ) )
144
150
145
151
146
152
class SyncYieldFixtureWithAsyncDeps (BaseAsyncFixture ):
@@ -149,11 +155,12 @@ class SyncYieldFixtureWithAsyncDeps(BaseAsyncFixture):
149
155
"""
150
156
151
157
@acontextmanager
158
+ @async_generator
152
159
async def _setup (self , resolved_deps ):
153
160
__tracebackhide__ = True
154
161
gen = self .fixturedef .func (** resolved_deps )
155
162
156
- yield gen .send (None )
163
+ await yield_ ( gen .send (None ) )
157
164
158
165
try :
159
166
gen .send (None )
@@ -169,9 +176,10 @@ class AsyncFixture(BaseAsyncFixture):
169
176
"""
170
177
171
178
@acontextmanager
179
+ @async_generator
172
180
async def _setup (self , resolved_deps ):
173
181
__tracebackhide__ = True
174
- yield await self .fixturedef .func (** resolved_deps )
182
+ await yield_ ( await self .fixturedef .func (** resolved_deps ) )
175
183
176
184
177
185
def _install_async_fixture_if_needed (fixturedef , request ):
0 commit comments