URI: 
       tnetwork: clean up broadcast_transaction - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit bc2a421d8776a8bc870a6e9521e004cd8e299b97
   DIR parent 76ff2f53c504b8dc9e7a5fce3e25634267e1ec02
  HTML Author: SomberNight <somber.night@protonmail.com>
       Date:   Mon,  4 Feb 2019 14:51:04 +0100
       
       network: clean up broadcast_transaction
       
       Handle all exceptions in network.py, instead of in gui code.
       Send some exceptions to crash reporter; previously gui code
       would suppress them.
       
       Diffstat:
         M electrum/network.py                 |      17 +++++++++++++++--
       
       1 file changed, 15 insertions(+), 2 deletions(-)
       ---
   DIR diff --git a/electrum/network.py b/electrum/network.py
       t@@ -43,7 +43,7 @@ from aiohttp import ClientResponse
        
        from . import util
        from .util import (PrintError, print_error, log_exceptions, ignore_exceptions,
       -                   bfh, SilentTaskGroup, make_aiohttp_session)
       +                   bfh, SilentTaskGroup, make_aiohttp_session, send_exception_to_crash_reporter)
        
        from .bitcoin import COIN
        from . import constants
       t@@ -188,6 +188,13 @@ class TxBroadcastServerReturnedError(TxBroadcastError):
                            str(self))
        
        
       +class TxBroadcastUnknownError(TxBroadcastError):
       +    def get_message_for_gui(self):
       +        return "{}\n{}" \
       +            .format(_("Unknown error when broadcasting the transaction."),
       +                    _("Consider trying to connect to a different server, or updating Electrum."))
       +
       +
        INSTANCE = None
        
        
       t@@ -764,9 +771,15 @@ class Network(PrintError):
                try:
                    out = await self.interface.session.send_request('blockchain.transaction.broadcast', [str(tx)], timeout=timeout)
                    # note: both 'out' and exception messages are untrusted input from the server
       -        except aiorpcx.jsonrpc.RPCError as e:
       +        except (RequestTimedOut, asyncio.CancelledError, asyncio.TimeoutError):
       +            raise  # pass-through
       +        except aiorpcx.jsonrpc.CodeMessageError as e:
                    self.print_error(f"broadcast_transaction error: {repr(e)}")
                    raise TxBroadcastServerReturnedError(self.sanitize_tx_broadcast_response(e.message)) from e
       +        except BaseException as e:  # intentional BaseException for sanity!
       +            self.print_error(f"broadcast_transaction error2: {repr(e)}")
       +            send_exception_to_crash_reporter(e)
       +            raise TxBroadcastUnknownError() from e
                if out != tx.txid():
                    self.print_error(f"unexpected txid for broadcast_transaction: {out} != {tx.txid()}")
                    raise TxBroadcastHashMismatch(_("Server returned unexpected transaction ID."))