From c4795ac4fbf3ea4ac1722668ddb671e48e486b69 Mon Sep 17 00:00:00 2001 From: k9ert Date: Wed, 15 May 2024 17:37:45 +0200 Subject: [PATCH] Raise a RpcError rather than a ValueError (#54) --- src/cryptoadvance/spectrum/elsock.py | 6 +++++- src/cryptoadvance/spectrum/spectrum.py | 13 ++----------- src/cryptoadvance/spectrum/spectrum_error.py | 9 +++++++++ 3 files changed, 16 insertions(+), 12 deletions(-) create mode 100644 src/cryptoadvance/spectrum/spectrum_error.py diff --git a/src/cryptoadvance/spectrum/elsock.py b/src/cryptoadvance/spectrum/elsock.py index b9afe0a..ab7def3 100644 --- a/src/cryptoadvance/spectrum/elsock.py +++ b/src/cryptoadvance/spectrum/elsock.py @@ -9,6 +9,7 @@ import time from queue import Queue +from .spectrum_error import RPCError from .util import FlaskThread, SpectrumInternalException, handle_exception # TODO: normal handling of ctrl+C interrupt @@ -559,7 +560,10 @@ def call(self, method, params=[]) -> dict: ) res = self._results.pop(uid) if "error" in res: - raise ValueError(res["error"]) + if "code" in res["error"] and "message" in res["error"]: + raise RPCError(res["error"]["message"], res["error"]["code"]) + else: + raise SpectrumInternalException(res) if "result" in res: return res["result"] diff --git a/src/cryptoadvance/spectrum/spectrum.py b/src/cryptoadvance/spectrum/spectrum.py index cf81a0f..d4d33c1 100644 --- a/src/cryptoadvance/spectrum/spectrum.py +++ b/src/cryptoadvance/spectrum/spectrum.py @@ -23,6 +23,7 @@ from embit.transaction import TransactionInput, TransactionOutput from sqlalchemy.sql import func +from .spectrum_error import RPCError from .db import UTXO, Descriptor, Script, Tx, TxCategory, Wallet, db from .elsock import ElectrumSocket, ElSockTimeoutException from .util import ( @@ -36,6 +37,7 @@ scripthash, ) + logger = logging.getLogger(__name__) # a set of registered rpc calls that do not need a wallet @@ -68,17 +70,6 @@ def wrapper(*args, **kwargs): return wrapper -class RPCError(Exception): - """Should use one of : https://github.com/bitcoin/bitcoin/blob/v22.0/src/rpc/protocol.h#L25-L88""" - - def __init__(self, message, code=-1): # -1 is RPC_MISC_ERROR - self.message = message - self.code = code - - def to_dict(self): - return {"code": self.code, "message": self.message} - - # we detect chain by looking at the hash of the 0th block ROOT_HASHES = { "000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f": "main", diff --git a/src/cryptoadvance/spectrum/spectrum_error.py b/src/cryptoadvance/spectrum/spectrum_error.py new file mode 100644 index 0000000..c9b708f --- /dev/null +++ b/src/cryptoadvance/spectrum/spectrum_error.py @@ -0,0 +1,9 @@ +class RPCError(Exception): + """Should use one of : https://github.com/bitcoin/bitcoin/blob/v22.0/src/rpc/protocol.h#L25-L88""" + + def __init__(self, message, code=-1): # -1 is RPC_MISC_ERROR + self.message = message + self.code = code + + def to_dict(self): + return {"code": self.code, "message": self.message} \ No newline at end of file