@@ -1294,18 +1294,12 @@ def rollback(self, begin=True):
1294
1294
yield from _run_sql (self .db , 'BEGIN' )
1295
1295
1296
1296
@asyncio .coroutine
1297
- def begin (self ):
1297
+ def __aenter__ (self ):
1298
+ if not asyncio .Task .current_task (loop = self .loop ):
1299
+ raise RuntimeError ("The transaction must run within a task" )
1298
1300
yield from self .db .push_transaction_async ()
1299
-
1300
1301
if self .db .transaction_depth_async () == 1 :
1301
1302
yield from _run_sql (self .db , 'BEGIN' )
1302
-
1303
- @asyncio .coroutine
1304
- def __aenter__ (self ):
1305
- if asyncio .Task .current_task (loop = self .loop ):
1306
- yield from self .begin ()
1307
- else :
1308
- yield from self .loop .create_task (self .begin ())
1309
1303
return self
1310
1304
1311
1305
@asyncio .coroutine
@@ -1440,24 +1434,29 @@ def get(self, key, *val):
1440
1434
def set (self , key , val ):
1441
1435
"""Set value stored for current running task.
1442
1436
"""
1443
- data = self .get_data ()
1437
+ data = self .get_data (True )
1444
1438
if data is not None :
1445
1439
data [key ] = val
1446
1440
else :
1447
1441
raise RuntimeError ("No task is currently running" )
1448
1442
1449
- def get_data (self ):
1450
- """Get dict stored for current running task.
1443
+ def get_data (self , create = False ):
1444
+ """Get dict stored for current running task. Return `None`
1445
+ or an empty dict if no data was found depending on the
1446
+ `create` argument value.
1447
+
1448
+ :param create: if argument is `True`, create empty dict
1449
+ for task, default: `False`
1451
1450
"""
1452
1451
task = asyncio .Task .current_task (loop = self .loop )
1453
1452
if task :
1454
1453
task_id = id (task )
1455
- if not task_id in self .data :
1454
+ if create and not task_id in self .data :
1456
1455
self .data [task_id ] = {}
1457
- task .add_done_callback (self .pop_data )
1458
- return self .data [ task_id ]
1456
+ task .add_done_callback (self .del_data )
1457
+ return self .data . get ( task_id )
1459
1458
1460
- def pop_data (self , task ):
1459
+ def del_data (self , task ):
1461
1460
"""Delete data for task from stored data dict.
1462
1461
"""
1463
- self .data . pop ( id (task ), None )
1462
+ del self .data [ id (task )]
0 commit comments