commit 5e92f637a65e35b26ff49c5afc94e71aa3962a15
parent 35b0b3a43c39fd862d71a2c861aea550982bbece
Author: ThomasV <thomasv@electrum.org>
Date: Fri, 6 Sep 2019 12:38:13 +0200
fix CLI exception handling
Diffstat:
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):