From 9cbbbc5e0ec24828b09c515586f47efe9f8a5b4e Mon Sep 17 00:00:00 2001 From: inso <insomniak.fr@gmaiL.com> Date: Fri, 25 Nov 2016 19:59:00 +0100 Subject: [PATCH] Search User Widget is back --- src/sakia/data/connectors/node.py | 2 +- src/sakia/data/entities/identity.py | 4 ++-- src/sakia/data/processors/identities.py | 12 ++++++++---- src/sakia/gui/dialogs/certification/controller.py | 5 +---- src/sakia/gui/dialogs/certification/view.py | 2 +- src/sakia/gui/navigation/graphs/wot/controller.py | 7 +++---- src/sakia/gui/sub/search_user/controller.py | 11 +++++------ src/sakia/gui/sub/search_user/model.py | 14 +++++++------- src/sakia/services/documents.py | 8 ++++---- 9 files changed, 32 insertions(+), 33 deletions(-) diff --git a/src/sakia/data/connectors/node.py b/src/sakia/data/connectors/node.py index c352dc99..303240b4 100644 --- a/src/sakia/data/connectors/node.py +++ b/src/sakia/data/connectors/node.py @@ -329,7 +329,7 @@ class NodeConnector(QObject): except (WSServerHandshakeError, ClientResponseError, ValueError) as e: self._logger.debug("Websocket peer {0} : {1} - {2}" - .format(type(e).__name__, str(e), self.node.pubkey[:5])) + .format(type(e).__name__, str(e), self.node.pubkey[:5])) await self.request_peers() except (ClientError, gaierror, TimeoutError, DisconnectedError) as e: self._logger.debug("{0} : {1}".format(str(e), self.node.pubkey[:5])) diff --git a/src/sakia/data/entities/identity.py b/src/sakia/data/entities/identity.py index a3ef5a2f..76dd8142 100644 --- a/src/sakia/data/entities/identity.py +++ b/src/sakia/data/entities/identity.py @@ -19,7 +19,7 @@ class Identity: membership_type = attr.ib(convert=str, default='', validator=lambda s, a, t: t in ('', 'IN', 'OUT'), cmp=False, hash=False) membership_written_on = attr.ib(convert=block_uid, default=BlockUID.empty(), cmp=False, hash=False) - def self_certification(self): + def document(self): """ Creates a self cert document for a given identity :param sakia.data.entities.Identity identity: @@ -27,4 +27,4 @@ class Identity: :rtype: duniterpy.documents.Identity """ return Identity(PROTOCOL_VERSION, self.currency, self.pubkey, - self.uid, self.blockstamp, self.signature) + self.uid, self.blockstamp, self.signature) diff --git a/src/sakia/data/processors/identities.py b/src/sakia/data/processors/identities.py index 654d8191..c9898260 100644 --- a/src/sakia/data/processors/identities.py +++ b/src/sakia/data/processors/identities.py @@ -7,7 +7,7 @@ from ..connectors import BmaConnector from ..processors import NodesProcessor from duniterpy.api import bma, errors from duniterpy.key import SigningKey -from duniterpy.documents import Identity, BlockUID, block_uid +from duniterpy.documents import BlockUID, block_uid from aiohttp.errors import ClientError from sakia.errors import NoPeerAvailable @@ -71,18 +71,22 @@ class IdentitiesProcessor: tries = 0 while tries < 3: try: - data = await self._bma_connector.get(currency, bma.wot.Lookup, req_args={'search': text}) + data = await self._bma_connector.get(currency, bma.wot.lookup, req_args={'search': text}) for result in data['results']: pubkey = result['pubkey'] for uid_data in result['uids']: if not uid_data['revoked']: - identity = Identity(currency, pubkey, uid_data['uid'], - uid_data['meta']['timestamp'], uid_data['self']) + identity = Identity(currency=currency, + pubkey=pubkey, + uid=uid_data['uid'], + blockstamp=uid_data['meta']['timestamp'], + signature=uid_data['self']) if identity not in identities: identities.append(identity) break except (errors.DuniterError, asyncio.TimeoutError, ClientError) as e: tries += 1 + self._logger.debug(str(e)) except NoPeerAvailable as e: self._logger.debug(str(e)) return identities diff --git a/src/sakia/gui/dialogs/certification/controller.py b/src/sakia/gui/dialogs/certification/controller.py index 35a11565..7a19764b 100644 --- a/src/sakia/gui/dialogs/certification/controller.py +++ b/src/sakia/gui/dialogs/certification/controller.py @@ -37,13 +37,10 @@ class CertificationController(ComponentController): """ Instanciate a Certification component :param sakia.gui.component.controller.ComponentController parent: + :param sakia.app.Application app: sakia application :return: a new Certification controller :rtype: CertificationController """ - account = kwargs['account'] - community = kwargs['community'] - communities_names = [c.name for c in account.communities] - contacts_names = [c['name'] for c in account.contacts] view = CertificationView(parent.view, None, None, communities_names, contacts_names) model = CertificationModel(None, app, account, community) diff --git a/src/sakia/gui/dialogs/certification/view.py b/src/sakia/gui/dialogs/certification/view.py index 992f9331..f3802e6e 100644 --- a/src/sakia/gui/dialogs/certification/view.py +++ b/src/sakia/gui/dialogs/certification/view.py @@ -34,7 +34,7 @@ class CertificationView(QDialog, Ui_CertificationDialog): pubkey_changed = pyqtSignal() - def __init__(self, parent, search_user_view, user_information_view, communities_names, contacts_names): + def __init__(self, parent, search_user_view, user_information_view): """ :param parent: diff --git a/src/sakia/gui/navigation/graphs/wot/controller.py b/src/sakia/gui/navigation/graphs/wot/controller.py index 9df22776..df885f92 100644 --- a/src/sakia/gui/navigation/graphs/wot/controller.py +++ b/src/sakia/gui/navigation/graphs/wot/controller.py @@ -33,10 +33,9 @@ class WotController(BaseGraphController): model = WotModel(None, app, connection, blockchain_service, identities_service) wot = cls(parent, view, model) model.setParent(wot) - #search_user = SearchUserController.create(wot, app, **{'account': account, - # 'community': community}) - #wot.view.set_search_user(search_user.view) - #search_user.identity_selected.connect(wot.center_on_identity) + search_user = SearchUserController.create(wot, app, **{'connection': connection}) + wot.view.set_search_user(search_user.view) + search_user.identity_selected.connect(wot.center_on_identity) return wot @property diff --git a/src/sakia/gui/sub/search_user/controller.py b/src/sakia/gui/sub/search_user/controller.py index c4cfc498..d459bef1 100644 --- a/src/sakia/gui/sub/search_user/controller.py +++ b/src/sakia/gui/sub/search_user/controller.py @@ -27,11 +27,10 @@ class SearchUserController(ComponentController): @classmethod def create(cls, parent, app, **kwargs): - account = kwargs['account'] - community = kwargs['community'] + connection = kwargs['connection'] view = SearchUserView(parent.view) - model = SearchUserModel(parent, app, account, community) + model = SearchUserModel(parent, app, connection) search_user = cls(parent, view, model) model.setParent(search_user) return search_user @@ -70,10 +69,10 @@ class SearchUserController(ComponentController): self.model.select_identity(index) self.identity_selected.emit(self.model.identity()) - def set_community(self, community): + def set_connection(self, connection): """ Set community - :param sakia.core.Community community: + :param sakia.data.entities.Connection connection :return: """ - self.model.community = community + self.model.connection = connection diff --git a/src/sakia/gui/sub/search_user/model.py b/src/sakia/gui/sub/search_user/model.py index 7ccb9a4f..029ff8d3 100644 --- a/src/sakia/gui/sub/search_user/model.py +++ b/src/sakia/gui/sub/search_user/model.py @@ -1,6 +1,7 @@ from sakia.gui.component.model import ComponentModel from duniterpy.api import errors, bma from sakia.errors import NoPeerAvailable +from sakia.data.processors import IdentitiesProcessor import logging @@ -10,18 +11,17 @@ class SearchUserModel(ComponentModel): The model of Navigation component """ - def __init__(self, parent, app, currency, identities_processor): + def __init__(self, parent, app, connection): """ :param sakia.gui.search_user.controller.NetworkController parent: the controller - :param sakia.core.Application app: the app - :param str currency: the currency - :param sakia.data.processors.IdentitiesProcessor identities_processor: the identities processor + :param sakia.app.Application app: the app + :param sakia.data.entities.Connection connection: the connection """ super().__init__(parent) self.app = app - self.currency = currency - self.identities_processor = identities_processor + self.identities_processor = IdentitiesProcessor.instanciate(app) + self.connection = connection self._nodes = list() self._current_identity = None @@ -46,7 +46,7 @@ class SearchUserModel(ComponentModel): :return: """ try: - self._nodes = await self.identities_processor.lookup(self.currency, text) + self._nodes = await self.identities_processor.lookup(self.connection.currency, text) except errors.DuniterError as e: if e.ucode == errors.NO_MATCHING_IDENTITY: self._nodes = list() diff --git a/src/sakia/services/documents.py b/src/sakia/services/documents.py index 1cdbdad8..a97a9726 100644 --- a/src/sakia/services/documents.py +++ b/src/sakia/services/documents.py @@ -110,8 +110,8 @@ class DocumentsService: self.pubkey, identity.pubkey, blockUID, None) key = SigningKey(salt, password) - certification.sign(identity.self_certification(), [key]) - signed_cert = certification.signed_raw(identity.self_certification()) + certification.sign(identity.document(), [key]) + signed_cert = certification.signed_raw(identity.document()) self._logger.debug("Certification : {0}".format(signed_cert)) responses = await self._bma_connector.bma_access.broadcast(currency, bma.wot.Certify, {}, @@ -138,7 +138,7 @@ class DocumentsService: :param str password: The account SigningKey password """ revocation = Revocation(PROTOCOL_VERSION, currency, None) - self_cert = identity.self_certification() + self_cert = identity.document() key = SigningKey(salt, password) revocation.sign(self_cert, [key]) @@ -173,7 +173,7 @@ class DocumentsService: :param str password: The account SigningKey password """ document = Revocation(PROTOCOL_VERSION, currency, identity.pubkey, "") - self_cert = identity.self_certification() + self_cert = identity.document() key = SigningKey(salt, password) -- GitLab