From c949ffe62b68faca0e4d54aeb9171a41a7a62f05 Mon Sep 17 00:00:00 2001 From: inso <insomniak.fr@gmaiL.com> Date: Wed, 21 Feb 2018 23:06:08 +0100 Subject: [PATCH] Silence unworrying exceptions --- src/sakia/data/connectors/node.py | 43 +++++++++++++++++++------------ src/sakia/main.py | 28 ++++++++++++++++++-- 2 files changed, 53 insertions(+), 18 deletions(-) diff --git a/src/sakia/data/connectors/node.py b/src/sakia/data/connectors/node.py index 39da3cb5..af0a5dc2 100644 --- a/src/sakia/data/connectors/node.py +++ b/src/sakia/data/connectors/node.py @@ -113,10 +113,10 @@ class NodeConnector(QObject): else: raise except (ClientError, gaierror, TimeoutError, ConnectionRefusedError, ValueError) as e: - self._logger.debug("{0}".format(str(e))) + self._logger.debug("{:}:{:}".format(str(e.__class__.__name__), str(e))) self.change_state_and_emit(Node.OFFLINE) except jsonschema.ValidationError as e: - self._logger.debug(str(e)) + self._logger.debug("{:}:{:}".format(str(e.__class__.__name__), str(e))) self.change_state_and_emit(Node.CORRUPTED) except RuntimeError: if self.session.closed: @@ -187,8 +187,7 @@ class NodeConnector(QObject): self._logger.debug("{0} : {1}".format(str(e), self.node.pubkey[:5])) self.change_state_and_emit(Node.OFFLINE) except jsonschema.ValidationError as e: - self._logger.debug(str(e)) - self._logger.debug("Validation error") + self._logger.debug("{:}:{:}".format(str(e.__class__.__name__), str(e))) self.change_state_and_emit(Node.CORRUPTED) except RuntimeError: if self.session.closed: @@ -220,8 +219,11 @@ class NodeConnector(QObject): self.change_state_and_emit(Node.CORRUPTED) self._logger.debug("Error in block reply : {0}".format(str(e))) else: - self._logger.debug("Could not connect to any BMA endpoint") - self.change_state_and_emit(Node.OFFLINE) + if self.session.closed: + pass + else: + self._logger.debug("Could not connect to any BMA endpoint") + self.change_state_and_emit(Node.OFFLINE) async def refresh_block(self, block_data): """ @@ -258,8 +260,11 @@ class NodeConnector(QObject): block_data['number'])) self.changed.emit() else: - self._logger.debug("Could not connect to any BMA endpoint") - self.change_state_and_emit(Node.OFFLINE) + if self.session.closed: + pass + else: + self._logger.debug("Could not connect to any BMA endpoint") + self.change_state_and_emit(Node.OFFLINE) else: self.change_state_and_emit(Node.ONLINE) @@ -283,8 +288,11 @@ class NodeConnector(QObject): self._logger.debug("Error in summary : {:}".format(str(e))) self.change_state_and_emit(Node.OFFLINE) else: - self._logger.debug("Could not connect to any BMA endpoint") - self.change_state_and_emit(Node.OFFLINE) + if self.session.closed: + pass + else: + self._logger.debug("Could not connect to any BMA endpoint") + self.change_state_and_emit(Node.OFFLINE) async def connect_peers(self): """ @@ -314,10 +322,10 @@ class NodeConnector(QObject): .format(type(e).__name__, str(e))) await self.request_peers() except (ClientError, gaierror, TimeoutError) as e: - self._logger.debug("{0}".format(str(e))) + self._logger.debug("{:}:{:}".format(str(e.__class__.__name__), str(e))) self.change_state_and_emit(Node.OFFLINE) except jsonschema.ValidationError as e: - self._logger.debug(str(e)) + self._logger.debug("{:}:{:}".format(str(e.__class__.__name__), str(e))) self.change_state_and_emit(Node.CORRUPTED) except RuntimeError: if self.session.closed: @@ -359,7 +367,7 @@ class NodeConnector(QObject): if e.ucode == 2012: # Since with multinodes, peers or not the same on all nodes, sometimes this request results # in peer not found error - self._logger.debug(str(e)) + self._logger.debug("{:}:{:}".format(str(e.__class__.__name__), str(e))) else: self.change_state_and_emit(Node.OFFLINE) self._logger.debug("Incorrect peer data in {leaf} : {err}".format(leaf=leaf_hash, err=str(e))) @@ -371,8 +379,11 @@ class NodeConnector(QObject): self._logger.debug("Error in peers reply : {0}".format(str(e))) self.change_state_and_emit(Node.OFFLINE) else: - self._logger.debug("Could not connect to any BMA endpoint") - self.change_state_and_emit(Node.OFFLINE) + if self.session.closed: + pass + else: + self._logger.debug("Could not connect to any BMA endpoint") + self.change_state_and_emit(Node.OFFLINE) def refresh_peer_data(self, peer_data): if "raw" in peer_data: @@ -382,7 +393,7 @@ class NodeConnector(QObject): peer_doc = Peer.from_signed_raw(str_doc) self.neighbour_found.emit(peer_doc) except MalformedDocumentError as e: - self._logger.debug(str(e)) + self._logger.debug("{:}:{:}".format(str(e.__class__.__name__), str(e))) else: self._logger.debug("Incorrect leaf reply") diff --git a/src/sakia/main.py b/src/sakia/main.py index 924f16ad..82b42936 100755 --- a/src/sakia/main.py +++ b/src/sakia/main.py @@ -18,6 +18,30 @@ from sakia.gui.preferences import PreferencesDialog from sakia.gui.widgets import QAsyncMessageBox + +def exit_exception_handler(loop, context): + """ + An exception handler which prints only on debug (used when exiting) + :param loop: the asyncio loop + :param context: the exception context + """ + + logging.debug('Exception handler executing') + message = context.get('message') + if not message: + message = 'Unhandled exception in event loop' + + try: + exception = context['exception'] + except KeyError: + exc_info = False + else: + exc_info = (type(exception), exception, exception.__traceback__) + + logging.debug("An unhandled exception occured : {0}".format(message), + exc_info=exc_info) + + def async_exception_handler(loop, context): """ An exception handler which exits the program if the exception @@ -85,7 +109,7 @@ def main(): sys.excepthook = exception_handler - sakia.setStyle('Fusion') + #sakia.setStyle('Fusion') loop = QSelectorEventLoop(sakia) loop.set_exception_handler(async_exception_handler) #loop.set_debug(True) @@ -131,7 +155,7 @@ def main(): window = MainWindowController.startup(app) loop.run_forever() try: - loop.set_exception_handler(None) + loop.set_exception_handler(exit_exception_handler) loop.run_until_complete(app.stop_current_profile()) logging.debug("Application stopped") except asyncio.CancelledError: -- GitLab