@@ -51,28 +51,35 @@ def pytest_pycollect_makeitem(collector, name, obj):
5151@pytest .hookimpl (hookwrapper = True ) 
5252def  pytest_fixture_setup (fixturedef , request ):
5353    """Adjust the event loop policy when an event loop is produced.""" 
54+     if  fixturedef .argname  ==  "event_loop"  and  'asyncio'  in  request .keywords :
55+         outcome  =  yield 
56+         loop  =  outcome .get_result ()
57+         policy  =  asyncio .get_event_loop_policy ()
58+         try :
59+             old_loop  =  policy .get_event_loop ()
60+         except  RuntimeError  as  exc :
61+             if  'no current event loop'  not  in str (exc ):
62+                 raise 
63+             old_loop  =  None 
64+         policy .set_event_loop (loop )
65+         fixturedef .addfinalizer (lambda : policy .set_event_loop (old_loop ))
66+         return 
67+ 
5468    if  isasyncgenfunction (fixturedef .func ):
5569        # This is an async generator function. Wrap it accordingly. 
56-         f  =  fixturedef .func 
70+         generator  =  fixturedef .func 
5771
58-         strip_event_loop  =  False 
59-         if  'event_loop'  not  in fixturedef .argnames :
60-             fixturedef .argnames  +=  ('event_loop' , )
61-             strip_event_loop  =  True 
6272        strip_request  =  False 
6373        if  'request'  not  in fixturedef .argnames :
6474            fixturedef .argnames  +=  ('request' , )
6575            strip_request  =  True 
6676
6777        def  wrapper (* args , ** kwargs ):
68-             loop  =  kwargs ['event_loop' ]
6978            request  =  kwargs ['request' ]
70-             if  strip_event_loop :
71-                 del  kwargs ['event_loop' ]
7279            if  strip_request :
7380                del  kwargs ['request' ]
7481
75-             gen_obj  =  f (* args , ** kwargs )
82+             gen_obj  =  generator (* args , ** kwargs )
7683
7784            async  def  setup ():
7885                res  =  await  gen_obj .__anext__ ()
@@ -89,50 +96,24 @@ async def async_finalizer():
8996                        msg  =  "Async generator fixture didn't stop." 
9097                        msg  +=  "Yield only once." 
9198                        raise  ValueError (msg )
92- 
93-                 loop .run_until_complete (async_finalizer ())
99+                 asyncio .get_event_loop ().run_until_complete (async_finalizer ())
94100
95101            request .addfinalizer (finalizer )
96- 
97-             return  loop .run_until_complete (setup ())
102+             return  asyncio .get_event_loop ().run_until_complete (setup ())
98103
99104        fixturedef .func  =  wrapper 
100- 
101105    elif  inspect .iscoroutinefunction (fixturedef .func ):
102-         # Just a coroutine, not an async generator. 
103-         f  =  fixturedef .func 
104- 
105-         strip_event_loop  =  False 
106-         if  'event_loop'  not  in fixturedef .argnames :
107-             fixturedef .argnames  +=  ('event_loop' , )
108-             strip_event_loop  =  True 
106+         coro  =  fixturedef .func 
109107
110108        def  wrapper (* args , ** kwargs ):
111-             loop  =  kwargs ['event_loop' ]
112-             if  strip_event_loop :
113-                 del  kwargs ['event_loop' ]
114- 
115109            async  def  setup ():
116-                 res  =  await  f (* args , ** kwargs )
110+                 res  =  await  coro (* args , ** kwargs )
117111                return  res 
118112
119-             return  loop .run_until_complete (setup ())
113+             return  asyncio . get_event_loop () .run_until_complete (setup ())
120114
121115        fixturedef .func  =  wrapper 
122- 
123-     outcome  =  yield 
124- 
125-     if  fixturedef .argname  ==  "event_loop"  and  'asyncio'  in  request .keywords :
126-         loop  =  outcome .get_result ()
127-         policy  =  asyncio .get_event_loop_policy ()
128-         try :
129-             old_loop  =  policy .get_event_loop ()
130-         except  RuntimeError  as  exc :
131-             if  'no current event loop'  not  in str (exc ):
132-                 raise 
133-             old_loop  =  None 
134-         policy .set_event_loop (loop )
135-         fixturedef .addfinalizer (lambda : policy .set_event_loop (old_loop ))
116+     yield 
136117
137118
138119@pytest .hookimpl (tryfirst = True , hookwrapper = True ) 
0 commit comments