URI: 
       tfix CLI exception handling - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit 5e92f637a65e35b26ff49c5afc94e71aa3962a15
   DIR parent 35b0b3a43c39fd862d71a2c861aea550982bbece
  HTML Author: ThomasV <thomasv@electrum.org>
       Date:   Fri,  6 Sep 2019 12:38:13 +0200
       
       fix CLI exception handling
       
       Diffstat:
         M electrum/commands.py                |      14 +++++---------
         M electrum/daemon.py                  |       9 +++++++--
       
       2 files changed, 12 insertions(+), 11 deletions(-)
       ---
   DIR diff --git a/electrum/commands.py b/electrum/commands.py
       t@@ -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
        
   DIR diff --git a/electrum/daemon.py b/electrum/daemon.py
       t@@ -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:
       t@@ -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):