1
2
3
4
5
6
7
8
9
10
11
12 from contextlib import contextmanager
13
14 import transaction
20
23 try:
24 txn = transaction.get()
25 yield txn
26 except:
27 if txn is not transaction.get():
28 raise InvalidTransactionError(
29 "could not abort transaction, was already aborted/committed within 'with' body")
30 try:
31 txn.abort()
32
33 except Exception:
34 pass
35 raise
36 else:
37 try:
38 if txn is transaction.get():
39 txn.commit()
40
41 except Exception:
42 pass
43
46 try:
47 txn = transaction.get()
48 sp = txn.savepoint()
49 if xaDataManager is not None:
50 txn.join(xaDataManager)
51 yield
52 except:
53 try:
54 sp.rollback()
55 if xaDataManager is not None:
56 xaDataManager.abort(txn)
57 except:
58 pass
59 raise
60 else:
61 pass
62