From 38a67d60b834336fff7cd50a00c3c806898ae4eb Mon Sep 17 00:00:00 2001 From: Insoleet <insomniak.fr@gmail.com> Date: Thu, 17 Sep 2015 15:00:39 +0200 Subject: [PATCH] Enhance exception catching + fix identities find --- src/cutecoin/core/registry/identities.py | 3 ++- src/cutecoin/tests/__init__.py | 2 +- .../gui/certification/test_certification.py | 3 ++- .../identities_tab/test_identities_table.py | 4 +-- .../test_add_community.py | 3 ++- .../tests/gui/transfer/test_transfer.py | 3 ++- .../tests/gui/wot_tab/test_wot_tab.py | 3 ++- src/cutecoin/tests/qapp.py | 26 +++++++++++++++++++ 8 files changed, 39 insertions(+), 8 deletions(-) diff --git a/src/cutecoin/core/registry/identities.py b/src/cutecoin/core/registry/identities.py index 409c4983..23848505 100644 --- a/src/cutecoin/core/registry/identities.py +++ b/src/cutecoin/core/registry/identities.py @@ -73,7 +73,7 @@ class IdentitiesRegistry: except ClientError: lookup_tries += 1 except NoPeerAvailable: - pass + return identity if pubkey in self._instances: identity = self._instances[pubkey] @@ -90,6 +90,7 @@ class IdentitiesRegistry: except ValueError as e: if '404' in str(e) or '400' in str(e): yield from lookup() + return identity else: tries += 1 except asyncio.TimeoutError: diff --git a/src/cutecoin/tests/__init__.py b/src/cutecoin/tests/__init__.py index 1d65e880..75eaa872 100644 --- a/src/cutecoin/tests/__init__.py +++ b/src/cutecoin/tests/__init__.py @@ -1 +1 @@ -from .qapp import get_application \ No newline at end of file +from .qapp import get_application, unitttest_exception_handler \ No newline at end of file diff --git a/src/cutecoin/tests/gui/certification/test_certification.py b/src/cutecoin/tests/gui/certification/test_certification.py index 36c3e1e7..301d9441 100644 --- a/src/cutecoin/tests/gui/certification/test_certification.py +++ b/src/cutecoin/tests/gui/certification/test_certification.py @@ -19,7 +19,7 @@ from cutecoin.core.app import Application from cutecoin.core import Account, Community, Wallet from cutecoin.core.net import Network, Node from cutecoin.core.net.api.bma.access import BmaAccess -from cutecoin.tests import get_application +from cutecoin.tests import get_application, unitttest_exception_handler from ucoinpy.api import bma @@ -29,6 +29,7 @@ class TestCertificationDialog(unittest.TestCase): QLocale.setDefault(QLocale("en_GB")) self.lp = quamash.QEventLoop(self.qapplication) asyncio.set_event_loop(self.lp) + self.lp.set_exception_handler(lambda lp, ctx : unitttest_exception_handler(self, lp, ctx)) self.identities_registry = IdentitiesRegistry({}) self.application = Application(self.qapplication, self.lp, self.identities_registry) diff --git a/src/cutecoin/tests/gui/identities_tab/test_identities_table.py b/src/cutecoin/tests/gui/identities_tab/test_identities_table.py index ec36d2d2..6dd89e9d 100644 --- a/src/cutecoin/tests/gui/identities_tab/test_identities_table.py +++ b/src/cutecoin/tests/gui/identities_tab/test_identities_table.py @@ -4,7 +4,6 @@ import asyncio import quamash import logging import time -from ucoinpy.documents.peer import BMAEndpoint as PyBMAEndpoint from PyQt5.QtWidgets import QDialog from PyQt5.QtCore import QLocale, Qt, QPoint from PyQt5.QtTest import QTest @@ -20,7 +19,7 @@ from cutecoin.core import Account, Community, Wallet from cutecoin.core.net import Network, Node from ucoinpy.documents.peer import BMAEndpoint from cutecoin.core.net.api.bma.access import BmaAccess -from cutecoin.tests import get_application +from cutecoin.tests import get_application, unitttest_exception_handler class TestIdentitiesTable(unittest.TestCase): @@ -29,6 +28,7 @@ class TestIdentitiesTable(unittest.TestCase): QLocale.setDefault(QLocale("en_GB")) self.lp = quamash.QEventLoop(self.qapplication) asyncio.set_event_loop(self.lp) + self.lp.set_exception_handler(lambda lp, ctx : unitttest_exception_handler(self, lp, ctx)) self.identities_registry = IdentitiesRegistry() self.application = Application(self.qapplication, self.lp, self.identities_registry) diff --git a/src/cutecoin/tests/gui/process_cfg_community/test_add_community.py b/src/cutecoin/tests/gui/process_cfg_community/test_add_community.py index 5d5a00ab..52b8a97f 100644 --- a/src/cutecoin/tests/gui/process_cfg_community/test_add_community.py +++ b/src/cutecoin/tests/gui/process_cfg_community/test_add_community.py @@ -15,7 +15,7 @@ from cutecoin.gui.process_cfg_community import ProcessConfigureCommunity from cutecoin.gui.password_asker import PasswordAskerDialog from cutecoin.core.app import Application from cutecoin.core.account import Account -from cutecoin.tests import get_application +from cutecoin.tests import get_application, unitttest_exception_handler class ProcessAddCommunity(unittest.TestCase): @@ -24,6 +24,7 @@ class ProcessAddCommunity(unittest.TestCase): QLocale.setDefault(QLocale("en_GB")) self.lp = quamash.QEventLoop(self.qapplication) asyncio.set_event_loop(self.lp) + self.lp.set_exception_handler(lambda lp, ctx : unitttest_exception_handler(self, lp, ctx)) self.identities_registry = IdentitiesRegistry({}) self.application = Application(self.qapplication, self.lp, self.identities_registry) diff --git a/src/cutecoin/tests/gui/transfer/test_transfer.py b/src/cutecoin/tests/gui/transfer/test_transfer.py index dcb83313..16e0cb21 100644 --- a/src/cutecoin/tests/gui/transfer/test_transfer.py +++ b/src/cutecoin/tests/gui/transfer/test_transfer.py @@ -19,7 +19,7 @@ from cutecoin.core import Account, Community, Wallet from cutecoin.core.net import Network, Node from ucoinpy.documents.peer import BMAEndpoint from cutecoin.core.net.api.bma.access import BmaAccess -from cutecoin.tests import get_application +from cutecoin.tests import get_application, unitttest_exception_handler from ucoinpy.api import bma @@ -29,6 +29,7 @@ class TestTransferDialog(unittest.TestCase): QLocale.setDefault(QLocale("en_GB")) self.lp = quamash.QEventLoop(self.qapplication) asyncio.set_event_loop(self.lp) + self.lp.set_exception_handler(lambda lp, ctx : unitttest_exception_handler(self, lp, ctx)) self.identities_registry = IdentitiesRegistry({}) self.application = Application(self.qapplication, self.lp, self.identities_registry) diff --git a/src/cutecoin/tests/gui/wot_tab/test_wot_tab.py b/src/cutecoin/tests/gui/wot_tab/test_wot_tab.py index b74ac0e2..af48ad83 100644 --- a/src/cutecoin/tests/gui/wot_tab/test_wot_tab.py +++ b/src/cutecoin/tests/gui/wot_tab/test_wot_tab.py @@ -19,7 +19,7 @@ from cutecoin.core.app import Application from cutecoin.core import Account, Community, Wallet from cutecoin.core.net import Network, Node from cutecoin.core.net.api.bma.access import BmaAccess -from cutecoin.tests import get_application +from cutecoin.tests import get_application, unitttest_exception_handler class TestIdentitiesTable(unittest.TestCase): @@ -28,6 +28,7 @@ class TestIdentitiesTable(unittest.TestCase): QLocale.setDefault(QLocale("en_GB")) self.lp = quamash.QEventLoop(self.qapplication) asyncio.set_event_loop(self.lp) + self.lp.set_exception_handler(lambda lp, ctx : unitttest_exception_handler(self, lp, ctx)) self.identities_registry = IdentitiesRegistry() self.application = Application(self.qapplication, self.lp, self.identities_registry) diff --git a/src/cutecoin/tests/qapp.py b/src/cutecoin/tests/qapp.py index 75c314f5..0de485b7 100644 --- a/src/cutecoin/tests/qapp.py +++ b/src/cutecoin/tests/qapp.py @@ -2,6 +2,32 @@ _application_ = [] +def unitttest_exception_handler(test, loop, context): + """ + An exception handler which exists the program if the exception + was not catch + :param loop: the asyncio loop + :param context: the exception context + """ + 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__) + + log_lines = [message] + for key in [k for k in sorted(context) if k not in {'message', 'exception'}]: + log_lines.append('{}: {!r}'.format(key, context[key])) + + test.failureException('\n'.join(log_lines)) + + + def get_application(): """Get the singleton QApplication""" from quamash import QApplication -- GitLab