1919 OverloadControlExecutorError ,
2020 TransactionAbortError ,
2121 TransactionCommitError ,
22+ TransactionFetchError ,
2223 TransactionInitError ,
2324 TransactionStatusError ,
2425)
@@ -241,6 +242,9 @@ class TransactionApiExecutor:
241242 :type max_size: int
242243 :param allow_dirty_read: Allow reads from followers in a cluster.
243244 :type allow_dirty_read: bool | None
245+ :param transaction_id: Initialize using an existing transaction instead of starting
246+ a new transaction.
247+ :type transaction_id: str | None
244248 """
245249
246250 def __init__ (
@@ -254,6 +258,7 @@ def __init__(
254258 lock_timeout : Optional [int ] = None ,
255259 max_size : Optional [int ] = None ,
256260 allow_dirty_read : bool = False ,
261+ transaction_id : Optional [str ] = None ,
257262 ) -> None :
258263 self ._conn = connection
259264
@@ -275,19 +280,29 @@ def __init__(
275280 if max_size is not None :
276281 data ["maxTransactionSize" ] = max_size
277282
278- request = Request (
279- method = "post" ,
280- endpoint = "/_api/transaction/begin" ,
281- data = data ,
282- headers = {"x-arango-allow-dirty-read" : "true" } if allow_dirty_read else None ,
283- )
284- resp = self ._conn .send_request (request )
283+ if transaction_id is None :
284+ request = Request (
285+ method = "post" ,
286+ endpoint = "/_api/transaction/begin" ,
287+ data = data ,
288+ headers = (
289+ {"x-arango-allow-dirty-read" : "true" } if allow_dirty_read else None
290+ ),
291+ )
292+ resp = self ._conn .send_request (request )
285293
286- if not resp .is_success :
287- raise TransactionInitError (resp , request )
294+ if not resp .is_success :
295+ raise TransactionInitError (resp , request )
296+
297+ result = resp .body ["result" ]
298+ self ._id : str = result ["id" ]
299+ else :
300+ self ._id = transaction_id
288301
289- result : Json = resp .body ["result" ]
290- self ._id : str = result ["id" ]
302+ try :
303+ self .status ()
304+ except TransactionStatusError as err :
305+ raise TransactionFetchError (err .response , err .request )
291306
292307 @property
293308 def context (self ) -> str :
0 commit comments