From e5ed4d618f8f6c53767a48f65912ab35b020cc35 Mon Sep 17 00:00:00 2001 From: Deep Bhatt Date: Sun, 26 Mar 2023 19:36:37 -0400 Subject: [PATCH] Add error handling to blockfrost submit_tx method --- pycardano/backend/blockfrost.py | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/pycardano/backend/blockfrost.py b/pycardano/backend/blockfrost.py index 3e15d9e3..24d79274 100644 --- a/pycardano/backend/blockfrost.py +++ b/pycardano/backend/blockfrost.py @@ -5,7 +5,7 @@ from typing import Dict, List, Optional, Union import cbor2 -from blockfrost import ApiUrls, BlockFrostApi +from blockfrost import ApiError, ApiUrls, BlockFrostApi from blockfrost.utils import Namespace from pycardano.address import Address @@ -222,13 +222,31 @@ def utxos(self, address: str) -> List[UTxO]: return utxos - def submit_tx(self, cbor: Union[bytes, str]): + def submit_tx(self, cbor: Union[bytes, str]) -> str: + """Submit a transaction. + + Args: + cbor (Union[bytes, str]): The serialized transaction to be submitted. + + Returns: + str: The transaction hash. + + Raises: + :class:`TransactionFailedException`: When fails to submit the transaction. + """ if isinstance(cbor, str): cbor = bytes.fromhex(cbor) with tempfile.NamedTemporaryFile(delete=False) as f: f.write(cbor) - self.api.transaction_submit(f.name) + try: + response = self.api.transaction_submit(f.name) + except ApiError as e: + os.remove(f.name) + raise TransactionFailedException( + f"Failed to submit transaction. Error code: {e.status_code}. Error message: {e.message}" + ) from e os.remove(f.name) + return response def evaluate_tx(self, cbor: Union[bytes, str]) -> Dict[str, ExecutionUnits]: """Evaluate execution units of a transaction.