@@ -38,7 +38,8 @@ async def test_issue_79():
3838 async with e .acquire ():
3939 pass # pragma: no cover
4040 # noinspection PyProtectedMember
41- assert len (e ._ctx .get ([])) == 0
41+ ctx = e ._ctx .get ()
42+ assert ctx and len (ctx .stack ) == 0
4243
4344
4445async def test_reuse (engine ):
@@ -94,6 +95,38 @@ async def test_reuse(engine):
9495 assert qsize (engine ) == init_size
9596
9697
98+ async def test_reuse_conn_in_task (request , engine ):
99+ loop = asyncio .get_event_loop ()
100+
101+ sub_task_result1 = loop .create_future ()
102+ sub_task_result2 = loop .create_future ()
103+
104+ main_task_check = asyncio .Event ()
105+
106+ async with engine .acquire (reuse = False ) as conn :
107+ async def _task ():
108+ async with engine .acquire (reuse = True ) as _task_conn :
109+ sub_task_result1 .set_result (_task_conn .raw_connection is not conn .raw_connection )
110+ await asyncio .sleep (0 )
111+
112+ async with engine .acquire (reuse = False ) as _task_conn :
113+ sub_task_result2 .set_result (_task_conn .raw_connection is not conn .raw_connection )
114+ await asyncio .sleep (0 )
115+ await asyncio .wait_for (main_task_check .wait (), 5 )
116+
117+ task = loop .create_task (_task ())
118+ request .addfinalizer (task .cancel )
119+
120+ assert await asyncio .wait_for (sub_task_result1 , 5 )
121+ assert await asyncio .wait_for (sub_task_result2 , 5 )
122+
123+ async with engine .acquire (reuse = True ) as sub_coon :
124+ assert conn .raw_connection is sub_coon .raw_connection
125+
126+ main_task_check .set ()
127+ await task
128+
129+
97130async def test_compile (engine ):
98131 stmt , params = engine .compile (User .query .where (User .id == 3 ))
99132 assert params [0 ] == 3
@@ -236,15 +269,15 @@ async def test_lazy(mocker):
236269 init_size = qsize (engine )
237270 async with engine .acquire (lazy = True ):
238271 assert qsize (engine ) == init_size
239- assert len (engine ._ctx .get ()) == 1
272+ assert len (engine ._ctx .get (). stack ) == 1
240273 assert engine ._ctx .get () is None
241274 assert qsize (engine ) == init_size
242275 async with engine .acquire (lazy = True ):
243276 assert qsize (engine ) == init_size
244- assert len (engine ._ctx .get ()) == 1
277+ assert len (engine ._ctx .get (). stack ) == 1
245278 assert await engine .scalar ("select 1" )
246279 assert qsize (engine ) == init_size - 1
247- assert len (engine ._ctx .get ()) == 1
280+ assert len (engine ._ctx .get (). stack ) == 1
248281 assert engine ._ctx .get () is None
249282 assert qsize (engine ) == init_size
250283
0 commit comments