Skip to content

Commit 7e477e9

Browse files
authored
Merge pull request #413 from multiversx/catch-api-errors
Handle proxy error
2 parents df972c0 + b84e31c commit 7e477e9

8 files changed

Lines changed: 56 additions & 12 deletions

File tree

multiversx_sdk_cli/cli_shared.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
load_password)
1717
from multiversx_sdk_cli.constants import (DEFAULT_TX_VERSION,
1818
TRANSACTION_OPTIONS_TX_GUARDED)
19+
from multiversx_sdk_cli.custom_network_provider import CustomNetworkProvider
1920
from multiversx_sdk_cli.errors import ArgumentsNotProvidedError
2021
from multiversx_sdk_cli.interfaces import ITransaction
2122
from multiversx_sdk_cli.ledger.ledger_functions import do_get_ledger_address
@@ -249,7 +250,7 @@ def check_options_for_guarded_tx(options: int):
249250

250251

251252
def send_or_simulate(tx: ITransaction, args: Any, dump_output: bool = True) -> CLIOutputBuilder:
252-
proxy = ProxyNetworkProvider(args.proxy)
253+
proxy = CustomNetworkProvider(args.proxy)
253254

254255
is_set_wait_result = hasattr(args, "wait_result") and args.wait_result
255256
is_set_send = hasattr(args, "send") and args.send

multiversx_sdk_cli/cli_transactions.py

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
11
from pathlib import Path
22
from typing import Any, List
33

4-
from multiversx_sdk_network_providers.proxy_network_provider import \
5-
ProxyNetworkProvider
6-
74
from multiversx_sdk_cli import cli_shared, utils
85
from multiversx_sdk_cli.cli_output import CLIOutputBuilder
96
from multiversx_sdk_cli.cosign_transaction import cosign_transaction
7+
from multiversx_sdk_cli.custom_network_provider import CustomNetworkProvider
108
from multiversx_sdk_cli.errors import NoWalletProvided
119
from multiversx_sdk_cli.transactions import (compute_relayed_v1_data,
1210
do_prepare_transaction,
@@ -88,9 +86,9 @@ def send_transaction(args: Any):
8886

8987
tx = load_transaction_from_file(args.infile)
9088
output = CLIOutputBuilder()
89+
proxy = CustomNetworkProvider(args.proxy)
9190

9291
try:
93-
proxy = ProxyNetworkProvider(args.proxy)
9492
tx_hash = proxy.send_transaction(tx)
9593
output.set_emitted_transaction_hash(tx_hash)
9694
finally:
@@ -101,7 +99,7 @@ def send_transaction(args: Any):
10199
def get_transaction(args: Any):
102100
args = utils.as_object(args)
103101
omit_fields = cli_shared.parse_omit_fields_arg(args)
104-
proxy = ProxyNetworkProvider(args.proxy)
102+
proxy = CustomNetworkProvider(args.proxy)
105103

106104
transaction = proxy.get_transaction(args.hash, True)
107105
output = CLIOutputBuilder().set_transaction_on_network(transaction, omit_fields).build()

multiversx_sdk_cli/cli_wallet.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,7 @@ def wallet_new(args: Any):
112112

113113
mnemonic = Mnemonic.generate()
114114
print(f"Mnemonic: {mnemonic.get_text()}")
115+
print(f"Wallet address: {mnemonic.derive_key().generate_public_key().to_address(address_hrp).to_bech32()}")
115116

116117
if format is None:
117118
return
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
from typing import Any, Dict, Optional, Protocol
2+
3+
from multiversx_sdk_network_providers import GenericError, ProxyNetworkProvider
4+
5+
from multiversx_sdk_cli.errors import ProxyError
6+
from multiversx_sdk_cli.interfaces import ISimulateResponse, ITransaction
7+
8+
9+
class ITransactionOnNetwork(Protocol):
10+
hash: str
11+
is_completed: Optional[bool]
12+
13+
def to_dictionary(self) -> Dict[str, Any]:
14+
...
15+
16+
17+
class CustomNetworkProvider:
18+
def __init__(self, url: str) -> None:
19+
self._provider = ProxyNetworkProvider(url)
20+
21+
def send_transaction(self, transaction: ITransaction) -> str:
22+
try:
23+
hash = self._provider.send_transaction(transaction)
24+
return hash
25+
except GenericError as ge:
26+
url = ge.url
27+
message = ge.data.get("error", "")
28+
data = ge.data.get("data", "")
29+
code = ge.data.get("code", "")
30+
raise ProxyError(message, url, data, code)
31+
32+
def get_transaction(self, tx_hash: str, with_process_status: Optional[bool] = False) -> ITransactionOnNetwork:
33+
return self._provider.get_transaction(tx_hash, with_process_status)
34+
35+
def simulate_transaction(self, transaction: ITransaction) -> ISimulateResponse:
36+
return self._provider.simulate_transaction(transaction)

multiversx_sdk_cli/errors.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -198,3 +198,13 @@ def __init__(self, message: str):
198198
class ArgumentsNotProvidedError(KnownError):
199199
def __init__(self, message: str):
200200
super().__init__(message)
201+
202+
203+
class ProxyError(KnownError):
204+
def __init__(self, message: str, url: str, data: str, code: str):
205+
inner = {
206+
"url": url,
207+
"data": data,
208+
"code": code
209+
}
210+
super().__init__(message, inner)

multiversx_sdk_cli/tests/test_cli_wallet.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -367,7 +367,8 @@ def test_sign_and_verify_message_with_multi_address_pem(capsys: Any):
367367

368368

369369
def _read_stdout_mnemonic(capsys: Any) -> str:
370-
return _read_stdout(capsys).replace("Mnemonic:", "").strip()
370+
lines = _read_stdout(capsys).split("\n")
371+
return lines[0].replace("Mnemonic:", "").strip()
371372

372373

373374
def _read_stdout(capsys: Any) -> str:

multiversx_sdk_cli/transactions.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import json
33
import logging
44
import time
5-
from typing import Any, Dict, Optional, Protocol, Sequence, TextIO, Tuple
5+
from typing import Any, Dict, Optional, Protocol, TextIO
66

77
from multiversx_sdk_core import Address, Transaction, TransactionPayload
88

@@ -30,9 +30,6 @@ class INetworkProvider(Protocol):
3030
def send_transaction(self, transaction: ITransaction) -> str:
3131
...
3232

33-
def send_transactions(self, transactions: Sequence[ITransaction]) -> Tuple[int, str]:
34-
...
35-
3633
def get_transaction(self, tx_hash: str, with_process_status: Optional[bool] = False) -> ITransactionOnNetwork:
3734
...
3835

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
44

55
[project]
66
name = "multiversx-sdk-cli"
7-
version = "9.5.0"
7+
version = "9.5.1"
88
authors = [
99
{ name="MultiversX" },
1010
]

0 commit comments

Comments
 (0)