From 5e92f637a65e35b26ff49c5afc94e71aa3962a15 Mon Sep 17 00:00:00 2001 From: ThomasV Date: Fri, 6 Sep 2019 12:38:13 +0200 Subject: [PATCH] fix CLI exception handling --- electrum/commands.py | 14 +++++--------- electrum/daemon.py | 9 +++++++-- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/electrum/commands.py b/electrum/commands.py index 73086958f..7a2499d41 100644 --- 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 index 4f1798a4f..c7b18e007 100644 --- 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):