diff --git a/src/cli/sentinel.py b/src/cli/sentinel.py index 4065a44..1b5dd1d 100644 --- a/src/cli/sentinel.py +++ b/src/cli/sentinel.py @@ -7,7 +7,7 @@ from subprocess import Popen, PIPE, STDOUT from datetime import datetime,timedelta import time - +from urllib.parse import urlparse from treelib import Tree from geography.continents import OurWorld @@ -258,8 +258,8 @@ def get_subscriptions(self, ADDRESS): self.RPC = CONFIG['network'].get('rpc', HTTParams.RPC) self.GRPC = CONFIG['network'].get('grpc', HTTParams.GRPC) - grpc = self.GRPC.replace("grpc+http://", "").replace("/", "") # TODO: why const is grpc is saved as ... (?) - grpcaddr, grpcport = grpc.split(":") + + grpcaddr, grpcport = urlparse(self.GRPC).netloc.split(":") sdk = SDKInstance(grpcaddr, int(grpcport)) subscriptions = sdk.subscriptions.QuerySubscriptionsForAccount(ADDRESS, pagination=PageRequest(limit=1000)) @@ -337,8 +337,8 @@ def GetQuota(self, id): CONFIG = MeileConfig.read_configuration(MeileConfig.CONFFILE) self.GRPC = CONFIG['network'].get('grpc', HTTParams.GRPC) - grpc = self.GRPC.replace("grpc+http://", "").replace("/", "") # TODO: why const is grpc is saved as ... (?) - grpcaddr, grpcport = grpc.split(":") + + grpcaddr, grpcport = urlparse(self.GRPC).netloc.split(":") sdk = SDKInstance(grpcaddr, int(grpcport)) allocations = sdk.subscriptions.QueryAllocations(subscription_id=int(id)) diff --git a/src/cli/wallet.py b/src/cli/wallet.py index 44e6dc0..f8fb364 100644 --- a/src/cli/wallet.py +++ b/src/cli/wallet.py @@ -4,8 +4,11 @@ import psutil import binascii import random +import re from time import sleep from os import path, remove +from urllib.parse import urlparse +from grpc import RpcError from json.decoder import JSONDecodeError @@ -103,8 +106,8 @@ def subscribe(self, KEYNAME, NODE, DEPOSIT, GB, hourly): self.RPC = CONFIG['network'].get('rpc', HTTParams.RPC) self.GRPC = CONFIG['network'].get('grpc', HTTParams.GRPC) - grpc = self.GRPC.replace("grpc+http://", "").replace("/", "") # TODO: why const is grpc is saved as ... (?) - grpcaddr, grpcport = grpc.split(":") + + grpcaddr, grpcport = urlparse(self.GRPC).netloc.split(":") kr = self.__keyring(PASSWORD) private_key = kr.get_password("meile-gui", KEYNAME) # TODO: very ungly @@ -183,8 +186,8 @@ def unsubscribe(self, subId): self.GRPC = CONFIG['network'].get('grpc', HTTParams.GRPC) - grpc = self.GRPC.replace("grpc+http://", "").replace("/", "") # TODO: why const is grpc is saved as ... (?) - grpcaddr, grpcport = grpc.split(":") + + grpcaddr, grpcport = urlparse(self.GRPC).netloc.split(":") kr = self.__keyring(PASSWORD) private_key = kr.get_password("meile-gui", KEYNAME) # TODO: very ungly @@ -204,8 +207,25 @@ def unsubscribe(self, subId): # gas=ConfParams.GAS, gas_multiplier=ConfParams.GASADJUSTMENT ) - tx = sdk.subscriptions.Cancel(subId, tx_params=tx_params) tx_height = 0 + + try: + tx = sdk.subscriptions.Cancel(subId, tx_params=tx_params) + except RpcError as rpc_error: + details = rpc_error.details() # pylint: disable=no-member + # TODO: the following prints are only for debug + print("details", details) + print("code", rpc_error.code()) # pylint: disable=no-member + print("debug_error_string", rpc_error.debug_error_string()) # pylint: disable=no-member + + search = f"invalid status inactive_pending for subscription {subId}" + if re.search(search, details, re.IGNORECASE): + message = "Cannot unsubscribe. Pending session still on blockchain. Try your request again later." + else: + message = "Error connecting to gRPC server. Try your request again later." + + return {'hash' : None, 'success' : False, 'message' : message} + if tx.get("log", None) is None: tx_response = sdk.nodes.wait_transaction(tx["hash"]) tx_height = tx_response.tx_response.height @@ -222,8 +242,8 @@ def connect(self, ID, address, type): self.GRPC = CONFIG['network'].get('grpc', HTTParams.GRPC) - grpc = self.GRPC.replace("grpc+http://", "").replace("/", "") # TODO: why const is grpc is saved as ... (?) - grpcaddr, grpcport = grpc.split(":") + + grpcaddr, grpcport = urlparse(self.GRPC).netloc.split(":") kr = self.__keyring(PASSWORD) private_key = kr.get_password("meile-gui", KEYNAME) # TODO: very ungly