Skip to content

Commit 533761e

Browse files
committed
refactoring
1 parent af90c56 commit 533761e

3 files changed

Lines changed: 78 additions & 55 deletions

File tree

multiversx_sdk_cli/cli_get.py

Lines changed: 44 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,17 @@
11
import logging
22
from typing import Any, Optional
33

4-
from multiversx_sdk import Address, ProxyNetworkProvider, Token, TokenComputer
4+
from multiversx_sdk import Address
5+
from multiversx_sdk import NetworkProviderError as SDKNetworkProviderError
6+
from multiversx_sdk import ProxyNetworkProvider, Token, TokenComputer
57

68
from multiversx_sdk_cli import cli_shared
7-
from multiversx_sdk_cli.address import (
8-
get_active_address,
9-
read_address_config_file,
10-
resolve_address_config_path,
11-
)
129
from multiversx_sdk_cli.config import get_config_for_network_providers
1310
from multiversx_sdk_cli.env import MxpyEnv
1411
from multiversx_sdk_cli.errors import (
15-
AddressConfigFileError,
1612
ArgumentsNotProvidedError,
1713
BadUsage,
18-
NoWalletProvided,
19-
UnknownAddressAliasError,
14+
NetworkProviderError,
2015
)
2116
from multiversx_sdk_cli.utils import dump_out_json
2217

@@ -74,6 +69,21 @@ def setup_parser(subparsers: Any) -> Any:
7469
sub.add_argument("--hash", type=str, required=True, help="the transaction hash")
7570
sub.set_defaults(func=get_transaction)
7671

72+
sub = cli_shared.add_command_subparser(subparsers, "get", "network-config", "Get the network configuration.")
73+
_add_proxy_arg(sub)
74+
sub.set_defaults(func=get_network_config)
75+
76+
sub = cli_shared.add_command_subparser(subparsers, "get", "network-status", "Get the network status.")
77+
_add_proxy_arg(sub)
78+
sub.add_argument(
79+
"--shard",
80+
type=int,
81+
choices=[0, 1, 2, 4294967295],
82+
default=4294967295,
83+
help="the shard to get the status for (default: %(default)s, which is methachain)",
84+
)
85+
sub.set_defaults(func=get_network_status)
86+
7787
parser.epilog = cli_shared.build_group_epilog(subparsers)
7888
return subparsers
7989

@@ -142,7 +152,10 @@ def get_key(args: Any):
142152
proxy = _get_proxy(args)
143153

144154
logger.info(f"Fetching details about {address.to_bech32()}")
145-
response = proxy.get_account_storage_entry(address, args.key)
155+
try:
156+
response = proxy.get_account_storage_entry(address, args.key)
157+
except SDKNetworkProviderError as e:
158+
raise NetworkProviderError(e.url, e.data)
146159

147160
dump_out_json(response.raw)
148161

@@ -173,39 +186,36 @@ def get_token(args: Any):
173186

174187
def get_transaction(args: Any):
175188
proxy = _get_proxy(args)
176-
response = proxy.get_transaction(args.hash)
189+
try:
190+
response = proxy.get_transaction(args.hash)
191+
except SDKNetworkProviderError as e:
192+
raise NetworkProviderError(e.url, e.data)
193+
except Exception as e:
194+
raise NetworkProviderError("", str(e))
177195

178196
dump_out_json(response.raw)
179197

180198

181-
def _get_address_from_alias_or_config(alias: Optional[str], hrp: str) -> Address:
182-
if alias:
183-
file_path = resolve_address_config_path()
184-
if not file_path.is_file():
185-
raise AddressConfigFileError("The address config file was not found")
199+
def get_network_config(args: Any):
200+
proxy = _get_proxy(args)
201+
config = proxy.get_network_config()
186202

187-
file = read_address_config_file()
188-
if file == dict():
189-
raise AddressConfigFileError("Address config file is empty")
203+
dump_out_json(config.raw)
190204

191-
addresses: dict[str, Any] = file["addresses"]
192-
wallet = addresses.get(alias, None)
193-
if not wallet:
194-
raise UnknownAddressAliasError(alias)
195205

196-
logger.info(f"Using address of [{alias}] from address config.")
197-
account = cli_shared.load_wallet_from_address_config(wallet=wallet, hrp=hrp)
198-
return account.address
199-
else:
200-
active_address = get_active_address()
201-
if active_address == dict():
202-
logger.info("No default wallet found in address config.")
203-
raise NoWalletProvided()
206+
def get_network_status(args: Any):
207+
proxy = _get_proxy(args)
208+
status = proxy.get_network_status()
209+
210+
dump_out_json(status.raw)
204211

205-
alias_of_default_wallet = read_address_config_file().get("active", "")
206-
logger.info(f"Using address of [{alias_of_default_wallet}] from address config.")
207212

208-
account = cli_shared.load_wallet_from_address_config(wallet=active_address, hrp=hrp)
213+
def _get_address_from_alias_or_config(alias: Optional[str], hrp: str) -> Address:
214+
if alias:
215+
account = cli_shared.load_wallet_by_alias(alias=alias, hrp=hrp)
216+
return account.address
217+
else:
218+
account = cli_shared.load_default_wallet(hrp=hrp)
209219
return account.address
210220

211221

multiversx_sdk_cli/cli_shared.py

Lines changed: 29 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -369,34 +369,42 @@ def prepare_account(args: Any):
369369
except Exception as e:
370370
raise LedgerError(str(e))
371371
elif args.sender:
372-
file_path = resolve_address_config_path()
373-
if not file_path.is_file():
374-
raise AddressConfigFileError("The address config file was not found")
372+
return load_wallet_by_alias(alias=args.sender, hrp=hrp)
373+
else:
374+
return load_default_wallet(hrp=hrp)
375375

376-
file = read_address_config_file()
377-
if file == dict():
378-
raise AddressConfigFileError("Address config file is empty")
379376

380-
addresses: dict[str, Any] = file["addresses"]
381-
wallet = addresses.get(args.sender, None)
382-
if not wallet:
383-
raise UnknownAddressAliasError(args.sender)
377+
def load_wallet_by_alias(alias: str, hrp: str) -> Account:
378+
file_path = resolve_address_config_path()
379+
if not file_path.is_file():
380+
raise AddressConfigFileError("The address config file was not found")
384381

385-
logger.info(f"Using sender [{args.sender}] from address config.")
386-
return load_wallet_from_address_config(wallet=wallet, hrp=hrp)
387-
else:
388-
active_address = get_active_address()
389-
if active_address == dict():
390-
logger.info("No default wallet found in address config.")
391-
raise NoWalletProvided()
382+
file = read_address_config_file()
383+
if file == dict():
384+
raise AddressConfigFileError("Address config file is empty")
385+
386+
addresses: dict[str, Any] = file["addresses"]
387+
wallet = addresses.get(alias, None)
388+
if not wallet:
389+
raise UnknownAddressAliasError(alias)
390+
391+
logger.info(f"Using sender [{alias}] from address config.")
392+
return _load_wallet_from_address_config(wallet=wallet, hrp=hrp)
393+
394+
395+
def load_default_wallet(hrp: str) -> Account:
396+
active_address = get_active_address()
397+
if active_address == dict():
398+
logger.info("No default wallet found in address config.")
399+
raise NoWalletProvided()
392400

393-
alias_of_default_wallet = read_address_config_file().get("active", "")
394-
logger.info(f"Using sender [{alias_of_default_wallet}] from address config.")
401+
alias_of_default_wallet = read_address_config_file().get("active", "")
402+
logger.info(f"Using sender [{alias_of_default_wallet}] from address config.")
395403

396-
return load_wallet_from_address_config(wallet=active_address, hrp=hrp)
404+
return _load_wallet_from_address_config(wallet=active_address, hrp=hrp)
397405

398406

399-
def load_wallet_from_address_config(wallet: dict[str, str], hrp: str) -> Account:
407+
def _load_wallet_from_address_config(wallet: dict[str, str], hrp: str) -> Account:
400408
kind = wallet.get("kind", None)
401409
if not kind:
402410
raise AddressConfigFileError("'kind' field must be set in the address config")

multiversx_sdk_cli/errors.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -211,3 +211,8 @@ def __init__(self, message: str):
211211
class AddressConfigFileError(KnownError):
212212
def __init__(self, message: str):
213213
super().__init__(message)
214+
215+
216+
class NetworkProviderError(KnownError):
217+
def __init__(self, url: str, error: str):
218+
super().__init__(f"Url = [{url}], error = {error}")

0 commit comments

Comments
 (0)