electrum

Electrum Bitcoin wallet
git clone https://git.parazyd.org/electrum
Log | Files | Refs | Submodules

commit 5e92f637a65e35b26ff49c5afc94e71aa3962a15
parent 35b0b3a43c39fd862d71a2c861aea550982bbece
Author: ThomasV <thomasv@electrum.org>
Date:   Fri,  6 Sep 2019 12:38:13 +0200

fix CLI exception handling

Diffstat:
Melectrum/commands.py | 14+++++---------
Melectrum/daemon.py | 9+++++++--
2 files changed, 12 insertions(+), 11 deletions(-)

diff --git a/electrum/commands.py b/electrum/commands.py @@ -107,18 +107,14 @@ def command(s): wallet_path = kwargs.pop('wallet_path') wallet = daemon.wallets.get(wallet_path) if wallet is None: - return {'error': "Wallet not loaded. try 'electrum load_wallet'" } + raise Exception('wallet not loaded') kwargs['wallet'] = wallet else: - # we are offline. the wallet must have been passed - pass + # we are offline. the wallet must have been passed if required + wallet = kwargs.get('wallet') if cmd.requires_password and password is None and wallet.has_password(): - return {'error': 'Password required' } - try: - return await func(*args, **kwargs) - except Exception as e: - #traceback.print_exc(sys.stderr) - return {'error':str(e)} + raise Exception('Password required') + return await func(*args, **kwargs) return func_wrapper return decorator diff --git a/electrum/daemon.py b/electrum/daemon.py @@ -326,10 +326,11 @@ class Daemon(Logger): except AuthenticationError: return web.Response(text='Forbidden', status=403) request = await request.text() - #self.logger.info(f'handling request: {request}') response = await jsonrpcserver.async_dispatch(request, methods=self.methods) if isinstance(response, jsonrpcserver.response.ExceptionResponse): self.logger.error(f"error handling request: {request}", exc_info=response.exc) + # this exposes the error message to the client + response.message = str(response.exc) if response.wanted: return web.json_response(response.deserialized(), status=response.http_status) else: @@ -441,7 +442,11 @@ class Daemon(Logger): for x in cmd.options: kwargs[x] = (config_options.get(x) if x in ['password', 'new_password'] else config.get(x)) func = getattr(self.cmd_runner, cmd.name) - result = await func(*args, **kwargs) + # fixme: not sure how to retrieve message in jsonrpcclient + try: + result = await func(*args, **kwargs) + except Exception as e: + result = {'error':str(e)} return result def run_daemon(self):