@@ -38,7 +38,8 @@ async def test_issue_79():
38
38
async with e .acquire ():
39
39
pass # pragma: no cover
40
40
# noinspection PyProtectedMember
41
- assert len (e ._ctx .get ([])) == 0
41
+ ctx = e ._ctx .get ()
42
+ assert ctx and len (ctx .stack ) == 0
42
43
43
44
44
45
async def test_reuse (engine ):
@@ -94,6 +95,38 @@ async def test_reuse(engine):
94
95
assert qsize (engine ) == init_size
95
96
96
97
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
+
97
130
async def test_compile (engine ):
98
131
stmt , params = engine .compile (User .query .where (User .id == 3 ))
99
132
assert params [0 ] == 3
@@ -236,15 +269,15 @@ async def test_lazy(mocker):
236
269
init_size = qsize (engine )
237
270
async with engine .acquire (lazy = True ):
238
271
assert qsize (engine ) == init_size
239
- assert len (engine ._ctx .get ()) == 1
272
+ assert len (engine ._ctx .get (). stack ) == 1
240
273
assert engine ._ctx .get () is None
241
274
assert qsize (engine ) == init_size
242
275
async with engine .acquire (lazy = True ):
243
276
assert qsize (engine ) == init_size
244
- assert len (engine ._ctx .get ()) == 1
277
+ assert len (engine ._ctx .get (). stack ) == 1
245
278
assert await engine .scalar ("select 1" )
246
279
assert qsize (engine ) == init_size - 1
247
- assert len (engine ._ctx .get ()) == 1
280
+ assert len (engine ._ctx .get (). stack ) == 1
248
281
assert engine ._ctx .get () is None
249
282
assert qsize (engine ) == init_size
250
283
0 commit comments