diff --git a/src/cutecoin/core/account.py b/src/cutecoin/core/account.py index f11fdeda6efb1be7add130ef20bec623f77e87da..a7dafaece39dadceb3ca5baeec9a68c9120832dc 100644 --- a/src/cutecoin/core/account.py +++ b/src/cutecoin/core/account.py @@ -10,8 +10,6 @@ from ucoinpy.key import SigningKey import logging import time -import math -import json import asyncio from PyQt5.QtCore import QObject, pyqtSignal, QCoreApplication, QT_TRANSLATE_NOOP @@ -19,7 +17,7 @@ from PyQt5.QtNetwork import QNetworkReply from .wallet import Wallet from .community import Community -from .registry import Identity, IdentitiesRegistry +from .registry import LocalState from ..tools.exceptions import ContactAlreadyExists from ..core.net.api import bma as qtbma from ..core.net.api.bma import PROTOCOL_VERSION @@ -283,8 +281,8 @@ class Account(QObject): :return: The account identity in the community :rtype: cutecoin.core.registry.Identity """ - identity = self._identities_registry.lookup(self.pubkey, community) - if identity.status == Identity.NOT_FOUND: + identity = self._identities_registry.find(self.pubkey, community) + if identity.local_state == LocalState.NOT_FOUND: identity.uid = self.name return identity diff --git a/src/cutecoin/core/graph.py b/src/cutecoin/core/graph.py index 64d9955f8036f51c43813aafaf9ab815a7bc2caf..9ec2ed88b6eb3107f5c107440addfe6288eb8b70 100644 --- a/src/cutecoin/core/graph.py +++ b/src/cutecoin/core/graph.py @@ -88,11 +88,11 @@ class Graph(object): if node['id'] in tuple(done): continue identity_selected = identity.from_metadata(node) - certifier_list = identity_selected.certifiers_of(self.community) + certifier_list = identity_selected.certifiers_of(self.app.identities_registry, self.community) self.add_certifier_list(certifier_list, identity_selected, identity) if identity.pubkey in tuple(self._graph.keys()): return False - certified_list = identity_selected.certified_by(self.community) + certified_list = identity_selected.certified_by(self.app.identities_registry, self.community) self.add_certified_list(certified_list, identity_selected, identity) if identity.pubkey in tuple(self._graph.keys()): return False @@ -141,30 +141,30 @@ class Graph(object): # add certifiers of uid for certifier in tuple(certifier_list): # add only valid certification... - if (time.time() - certifier['cert_time']['medianTime']) > self.signature_validity: + if (time.time() - certifier['cert_time']) > self.signature_validity: continue # new node - if certifier['pubkey'] not in self._graph.keys(): + if certifier['identity'].pubkey not in self._graph.keys(): node_status = 0 - if certifier['pubkey'] == identity_account.pubkey: + if certifier['identity'].pubkey == identity_account.pubkey: node_status += NODE_STATUS_HIGHLIGHTED - if certifier['isMember'] is False: + if certifier['identity'].is_member(self.community) is False: node_status += NODE_STATUS_OUT - self._graph[certifier['pubkey']] = { - 'id': certifier['pubkey'], + self._graph[certifier['identity'].pubkey] = { + 'id': certifier['identity'].pubkey, 'arcs': list(), - 'text': certifier['uid'], - 'tooltip': certifier['pubkey'], + 'text': certifier['identity'].uid, + 'tooltip': certifier['identity'].pubkey, 'status': node_status, 'connected': [identity.pubkey] } # keep only the latest certification - if self._graph[certifier['pubkey']]['arcs']: - if certifier['cert_time']['medianTime'] < self._graph[certifier['pubkey']]['arcs'][0]['cert_time']: + if self._graph[certifier['identity'].pubkey]['arcs']: + if certifier['cert_time'] < self._graph[certifier['identity'].pubkey]['arcs'][0]['cert_time']: continue # display validity status - if (time.time() - certifier['cert_time']['medianTime']) > self.ARC_STATUS_STRONG_time: + if (time.time() - certifier['cert_time']) > self.ARC_STATUS_STRONG_time: arc_status = ARC_STATUS_WEAK else: arc_status = ARC_STATUS_STRONG @@ -173,17 +173,17 @@ class Graph(object): 'status': arc_status, 'tooltip': QLocale.toString( QLocale(), - QDateTime.fromTime_t(certifier['cert_time']['medianTime'] + self.signature_validity).date(), + QDateTime.fromTime_t(certifier['cert_time'] + self.signature_validity).date(), QLocale.dateFormat(QLocale(), QLocale.ShortFormat) ), - 'cert_time': certifier['cert_time']['medianTime'] + 'cert_time': certifier['cert_time'] } # add arc to certifier - self._graph[certifier['pubkey']]['arcs'].append(arc) + self._graph[certifier['identity'].pubkey]['arcs'].append(arc) # if certifier node not in identity nodes - if certifier['pubkey'] not in tuple(self._graph[identity.pubkey]['connected']): + if certifier['identity'].pubkey not in tuple(self._graph[identity.pubkey]['connected']): # add certifier node to identity node - self._graph[identity.pubkey]['connected'].append(certifier['pubkey']) + self._graph[identity.pubkey]['connected'].append(certifier['identity'].pubkey) def add_certified_list(self, certified_list, identity, identity_account): """ @@ -196,36 +196,36 @@ class Graph(object): # add certified by uid for certified in tuple(certified_list): # add only valid certification... - if (time.time() - certified['cert_time']['medianTime']) > self.signature_validity: + if (time.time() - certified['cert_time']) > self.signature_validity: continue - if certified['pubkey'] not in self._graph.keys(): + if certified['identity'].pubkey not in self._graph.keys(): node_status = 0 - if certified['pubkey'] == identity_account.pubkey: + if certified['identity'].pubkey == identity_account.pubkey: node_status += NODE_STATUS_HIGHLIGHTED - if certified['isMember'] is False: + if certified['identity'].is_member(self.community) is False: node_status += NODE_STATUS_OUT - self._graph[certified['pubkey']] = { - 'id': certified['pubkey'], + self._graph[certified['identity'].pubkey] = { + 'id': certified['identity'].pubkey, 'arcs': list(), - 'text': certified['uid'], - 'tooltip': certified['pubkey'], + 'text': certified['identity'].uid, + 'tooltip': certified['identity'].pubkey, 'status': node_status, 'connected': [identity.pubkey] } # display validity status - if (time.time() - certified['cert_time']['medianTime']) > self.ARC_STATUS_STRONG_time: + if (time.time() - certified['cert_time']) > self.ARC_STATUS_STRONG_time: arc_status = ARC_STATUS_WEAK else: arc_status = ARC_STATUS_STRONG arc = { - 'id': certified['pubkey'], + 'id': certified['identity'].pubkey, 'status': arc_status, 'tooltip': QLocale.toString( QLocale(), - QDateTime.fromTime_t(certified['cert_time']['medianTime'] + self.signature_validity).date(), + QDateTime.fromTime_t(certified['cert_time'] + self.signature_validity).date(), QLocale.dateFormat(QLocale(), QLocale.ShortFormat) ), - 'cert_time': certified['cert_time']['medianTime'] + 'cert_time': certified['cert_time'] } # replace old arc if this one is more recent @@ -245,9 +245,9 @@ class Graph(object): # add arc in graph self._graph[identity.pubkey]['arcs'].append(arc) # if certified node not in identity nodes - if certified['pubkey'] not in tuple(self._graph[identity.pubkey]['connected']): + if certified['identity'].pubkey not in tuple(self._graph[identity.pubkey]['connected']): # add certified node to identity node - self._graph[identity.pubkey]['connected'].append(certified['pubkey']) + self._graph[identity.pubkey]['connected'].append(certified['identity'].pubkey) def add_identity(self, identity, status=None, arcs=None, connected=None): """ diff --git a/src/cutecoin/core/registry/__init__.py b/src/cutecoin/core/registry/__init__.py index 4ab046a19ff274331c3bc1ffd25e16bd19985478..5180c368bb56a87483d542c19bb83c71133d1a94 100644 --- a/src/cutecoin/core/registry/__init__.py +++ b/src/cutecoin/core/registry/__init__.py @@ -1,2 +1,2 @@ from .identities import IdentitiesRegistry -from .identity import Identity \ No newline at end of file +from .identity import Identity, LocalState, BlockchainState \ No newline at end of file diff --git a/src/cutecoin/core/registry/identities.py b/src/cutecoin/core/registry/identities.py index 3810908a3f044f9d314ab133f87ebc7dd0f7cb2f..12eb705abfe0dd503a27b2463e1dd262977620d2 100644 --- a/src/cutecoin/core/registry/identities.py +++ b/src/cutecoin/core/registry/identities.py @@ -1,6 +1,6 @@ -from PyQt5.QtNetwork import QNetworkReply +from PyQt5.QtNetwork import QNetworkReply, QNetworkRequest from cutecoin.core.net.api import bma as qtbma -from .identity import Identity +from .identity import Identity, LocalState, BlockchainState import json import asyncio @@ -42,7 +42,7 @@ class IdentitiesRegistry: identities_json.append(identity.jsonify()) return {'registry': identities_json} - def lookup(self, pubkey, community): + def find(self, pubkey, community): """ Get a person from the pubkey found in a community @@ -61,31 +61,60 @@ class IdentitiesRegistry: else: identity = Identity.empty(pubkey) self._instances[pubkey] = identity - reply = community.bma_access.simple_request(qtbma.wot.Lookup, req_args={'search': pubkey}) - reply.finished.connect(lambda: self.handle_lookup(reply, identity, community)) + reply = community.bma_access.simple_request(qtbma.wot.CertifiersOf, req_args={'search': pubkey}) + reply.finished.connect(lambda: self.handle_certifiersof(reply, identity, community)) return identity @asyncio.coroutine - def future_lookup(self, pubkey, community): - def handle_reply(reply): - strdata = bytes(reply.readAll()).decode('utf-8') - data = json.loads(strdata) - - timestamp = 0 - for result in data['results']: - if result["pubkey"] == identity.pubkey: - uids = result['uids'] - identity_uid = "" - for uid_data in uids: - if uid_data["meta"]["timestamp"] > timestamp: - timestamp = uid_data["meta"]["timestamp"] - identity_uid = uid_data["uid"] - identity.uid = identity_uid - identity.status = Identity.FOUND + def future_find(self, pubkey, community): + def handle_certifiersof_reply(reply, tries=0): + if reply.error() == QNetworkReply.NoError: + status_code = reply.attribute(QNetworkRequest.HttpStatusCodeAttribute) + if status_code == 200: + strdata = bytes(reply.readAll()).decode('utf-8') + data = json.loads(strdata) + + identity.uid = data['uid'] + identity.local_state = LocalState.PARTIAL + identity.blockchain_state = BlockchainState.VALIDATED logging.debug("Lookup : found {0}".format(identity)) future_identity.set_result(True) - return - future_identity.set_result(True) + else: + reply = community.bma_access.simple_request(qtbma.wot.Lookup, + req_args={'search': pubkey}) + reply.finished.connect(lambda: handle_lookup_reply(reply)) + elif tries < 3: + reply = community.bma_access.simple_request(qtbma.wot.CertifiersOf, req_args={'search': pubkey}) + reply.finished.connect(lambda: handle_certifiersof_reply(reply, tries=tries+1)) + else: + future_identity.set_result(False) + + def handle_lookup_reply(reply, tries=0): + status_code = reply.attribute(QNetworkRequest.HttpStatusCodeAttribute) + if reply.error() == QNetworkReply.NoError and status_code == 200: + strdata = bytes(reply.readAll()).decode('utf-8') + data = json.loads(strdata) + + timestamp = 0 + for result in data['results']: + if result["pubkey"] == identity.pubkey: + uids = result['uids'] + identity_uid = "" + for uid_data in uids: + if uid_data["meta"]["timestamp"] > timestamp: + timestamp = uid_data["meta"]["timestamp"] + identity_uid = uid_data["uid"] + identity.uid = identity_uid + identity.status = Identity.FOUND + logging.debug("Lookup : found {0}".format(identity)) + future_identity.set_result(True) + return + future_identity.set_result(True) + elif tries < 3: + reply = community.bma_access.simple_request(qtbma.wot.Lookup, req_args={'search': pubkey}) + reply.finished.connect(lambda: handle_lookup_reply(reply, tries=tries+1)) + else: + future_identity.set_result(False) future_identity = asyncio.Future() if pubkey in self._instances: @@ -94,11 +123,41 @@ class IdentitiesRegistry: else: identity = Identity.empty(pubkey) self._instances[pubkey] = identity - reply = community.bma_access.simple_request(qtbma.wot.Lookup, req_args={'search': pubkey}) - reply.finished.connect(lambda: handle_reply(reply)) + reply = community.bma_access.simple_request(qtbma.wot.CertifiersOf, req_args={'search': pubkey}) + reply.finished.connect(lambda: handle_certifiersof_reply(reply)) yield from future_identity return identity + def handle_certifiersof(self, reply, identity, community, tries=0): + """ + :param PyQt5.QtNetwork.QNetworkReply reply + :param cutecoin.core.registry.identity.Identity identity: The looked up identity + :return: + """ + if reply.error() == QNetworkReply.NoError: + status_code = reply.attribute(QNetworkRequest.HttpStatusCodeAttribute) + if status_code == 200: + strdata = bytes(reply.readAll()).decode('utf-8') + data = json.loads(strdata) + identity.uid = data['uid'] + identity.local_state = LocalState.PARTIAL + identity.blockchain_state = BlockchainState.VALIDATED + logging.debug("Lookup : found {0}".format(identity)) + identity.inner_data_changed.emit(str(qtbma.wot.CertifiersOf)) + else: + reply = community.bma_access.simple_request(qtbma.wot.Lookup, + req_args={'search': identity.pubkey}) + reply.finished.connect(lambda: self.handle_lookup(reply, identity, + community, tries=0)) + else: + logging.debug("Error in reply : {0}".format(reply.error())) + if tries < 3: + tries += 1 + reply = community.bma_access.simple_request(qtbma.wot.CertifiersOf, + req_args={'search': identity.pubkey}) + reply.finished.connect(lambda: self.handle_certifiersof(reply, identity, + community, tries=tries)) + def handle_lookup(self, reply, identity, community, tries=0): """ :param cutecoin.core.registry.identity.Identity identity: The looked up identity @@ -131,7 +190,7 @@ class IdentitiesRegistry: reply.finished.connect(lambda: self.handle_lookup(reply, identity, community, tries=tries)) - def from_metadata(self, metadata): + def from_handled_data(self, uid, pubkey, blockchain_state): """ Get a person from a metadata dict. A metadata dict has a 'text' key corresponding to the person uid, @@ -140,10 +199,23 @@ class IdentitiesRegistry: :param dict metadata: The person metadata :return: A new person if pubkey wasn't knwon, else the existing instance. """ - pubkey = metadata['id'] if pubkey in self._instances: + if self._instances[pubkey].blockchain_state == BlockchainState.NOT_FOUND: + self._instances[pubkey].blockchain_state = blockchain_state + elif self._instances[pubkey].blockchain_state != BlockchainState.VALIDATED \ + and blockchain_state == BlockchainState.VALIDATED: + self._instance[pubkey].blockchain_state = blockchain_state + self._instances[pubkey].inner_data_changed.emit() + + if self._instances[pubkey].uid != uid: + self._instances[pubkey].uid = uid + self._instances[pubkey].inner_data_changed.emit() + + if self._instances[pubkey].local_state == LocalState.NOT_FOUND: + self._instances[pubkey].local_state = LocalState.COMPLETED + return self._instances[pubkey] else: - identity = Identity.from_metadata(metadata) + identity = Identity.from_handled_data(uid, pubkey, blockchain_state) self._instances[pubkey] = identity return identity diff --git a/src/cutecoin/core/registry/identity.py b/src/cutecoin/core/registry/identity.py index f0179cea8d345136e83e51f5c93279e8550280e5..e3757852621dabc8da4cc89f622c32f794c5cf6b 100644 --- a/src/cutecoin/core/registry/identity.py +++ b/src/cutecoin/core/registry/identity.py @@ -7,6 +7,7 @@ Created on 11 févr. 2014 import logging import time import asyncio +from enum import Enum from ucoinpy.documents.certification import SelfCertification from cutecoin.tools.exceptions import Error, NoPeerAvailable,\ @@ -16,36 +17,46 @@ from cutecoin.core.net.api.bma import PROTOCOL_VERSION from PyQt5.QtCore import QObject, pyqtSignal +class LocalState(Enum): + NOT_FOUND = 0 + PARTIAL = 1 + COMPLETED = 2 + + +class BlockchainState(Enum): + NOT_FOUND = 0 + BUFFERED = 1 + VALIDATED = 2 + + class Identity(QObject): """ A person with a uid and a pubkey """ - FOUND = 1 - NOT_FOUND = 0 - inner_data_changed = pyqtSignal(str) - def __init__(self, uid, pubkey, status): + def __init__(self, uid, pubkey, local_state, blockchain_state): """ Initializing a person object. :param str uid: The person uid, also known as its uid on the network :param str pubkey: The person pubkey - :param int status: The local status of the identity + :param LocalState local_state: The local status of the identity + :param BlockchainState blockchain_state: The blockchain status of the identity """ super().__init__() - assert(status in (Identity.FOUND, Identity.NOT_FOUND)) self.uid = uid self.pubkey = pubkey - self.status = status + self.local_state = local_state + self.blockchain_state = blockchain_state @classmethod def empty(cls, pubkey): - return cls("", pubkey, Identity.NOT_FOUND) + return cls("", pubkey, LocalState.NOT_FOUND, BlockchainState.NOT_FOUND) @classmethod - def from_metadata(cls, metadata): - return cls(metadata["text"], metadata["id"], Identity.NOT_FOUND) + def from_handled_data(cls, uid, pubkey, blockchain_state): + return cls(uid, pubkey, LocalState.COMPLETED, blockchain_state) @classmethod def from_json(cls, json_data): @@ -57,9 +68,10 @@ class Identity(QObject): """ pubkey = json_data['pubkey'] uid = json_data['uid'] - status = json_data['status'] + local_state = json_data['local_state'] + blockchain_state = json_data['blockchain_state'] - return cls(uid, pubkey, status) + return cls(uid, pubkey, local_state, blockchain_state) @asyncio.coroutine def selfcert(self, community): @@ -185,104 +197,114 @@ class Identity(QObject): return certifiers['isMember'] return False - def certifiers_of(self, community): + def certifiers_of(self, identities_registry, community): """ Get the list of this person certifiers + :param cutecoin.core.registry.identities.IdentitiesRegistry identities_registry: The identities registry :param cutecoin.core.community.Community community: The community target to request the join date - :return: The list of the certifiers of this community in BMA json format + :return: The list of the certifiers of this community """ - certifiers = community.bma_access.get(self, qtbma.wot.CertifiersOf, {'search': self.pubkey}) + data = community.bma_access.get(self, qtbma.wot.CertifiersOf, {'search': self.pubkey}) - if certifiers == qtbma.wot.CertifiersOf.null_value: + certifiers = list() + + if data == qtbma.wot.CertifiersOf.null_value: logging.debug('bma.wot.CertifiersOf request error') data = community.bma_access.get(self, qtbma.wot.Lookup, {'search': self.pubkey}) if data == qtbma.wot.Lookup.null_value: logging.debug('bma.wot.Lookup request error') - return list() - - # convert api data to certifiers list - certifiers = list() - # add certifiers of uid - - for result in data['results']: - if result["pubkey"] == self.pubkey: - for uid_data in result['uids']: - for certifier_data in uid_data['others']: - for uid in certifier_data['uids']: - # add a certifier - certifier = {} - certifier['uid'] = uid - certifier['pubkey'] = certifier_data['pubkey'] - certifier['isMember'] = certifier_data['isMember'] - certifier['cert_time'] = dict() - certifier['cert_time']['medianTime'] = community.get_block( - certifier_data['meta']['block_number'])['medianTime'] - certifiers.append(certifier) - return certifiers - - return certifiers['certifications'] - - def unique_valid_certifiers_of(self, community): - certifier_list = self.certifiers_of(community) + else: + for result in data['results']: + if result["pubkey"] == self.pubkey: + for uid_data in result['uids']: + for certifier_data in uid_data['others']: + for uid in certifier_data['uids']: + # add a certifier + certifier = {} + certifier['identity'] = identities_registry.from_handled_data(uid, certifier_data['pubkey'], + BlockchainState.BUFFERED) + block = community.bma_access.get(self, qtbma.blockchain.Block, + {'number': certifier_data['meta']['block_number']}) + certifier['cert_time'] = block['medianTime'] + certifiers.append(certifier) + else: + for certifier_data in data['certifications']: + certifier = {} + certifier['identity'] = identities_registry.from_handled_data(certifier_data['uid'], + certifier_data['pubkey'], + BlockchainState.VALIDATED) + certifier['cert_time'] = certifier_data['cert_time']['medianTime'] + certifiers.append(certifier) + return certifiers + + def unique_valid_certifiers_of(self, identities_registry, community): + certifier_list = self.certifiers_of(identities_registry, community) unique_valid = [] # add certifiers of uid for certifier in tuple(certifier_list): # add only valid certification... - if community.certification_expired(certifier['cert_time']['medianTime']): + if community.certification_expired(certifier['cert_time']): continue # keep only the latest certification - already_found = [c['pubkey'] for c in unique_valid] - if certifier['pubkey'] in already_found: - index = already_found.index(certifier['pubkey']) - if certifier['cert_time']['medianTime'] > unique_valid[index]['cert_time']['medianTime']: + already_found = [c['identity'].pubkey for c in unique_valid] + if certifier['identity'].pubkey in already_found: + index = already_found.index(certifier['identity'].pubkey) + if certifier['cert_time'] > unique_valid[index]['cert_time']: unique_valid[index] = certifier else: unique_valid.append(certifier) return unique_valid - def certified_by(self, community): + def certified_by(self, identities_registry, community): """ Get the list of persons certified by this person :param cutecoin.core.community.Community community: The community target to request the join date :return: The list of the certified persons of this community in BMA json format """ - certified_list = community.bma_access.get(self, qtbma.wot.CertifiedBy, {'search': self.pubkey}) - if certified_list == qtbma.wot.CertifiedBy.null_value: + data = community.bma_access.get(self, qtbma.wot.CertifiedBy, {'search': self.pubkey}) + certified_list = list() + if data == qtbma.wot.CertifiedBy.null_value: logging.debug('bma.wot.CertifiersOf request error') data = community.bma_access.get(self, qtbma.wot.Lookup, {'search': self.pubkey}) if data == qtbma.wot.Lookup.null_value: logging.debug('bma.wot.Lookup request error') - return list() else: - certified_list = list() for result in data['results']: if result["pubkey"] == self.pubkey: - for certified in result['signed']: - certified['cert_time'] = dict() - certified['cert_time']['medianTime'] = certified['meta']['timestamp'] + for certified_data in result['signed']: + certified = {} + certified['identity'] = identities_registry.from_handled_data(certified_data['uid'], + certified_data['pubkey'], + BlockchainState.BUFFERED) + certified['cert_time'] = certified_data['meta']['timestamp'] certified_list.append(certified) - - return certified_list - - return certified_list['certifications'] - - def unique_valid_certified_by(self, community): - certified_list = self.certified_by(community) + else: + for certified_data in data['certifications']: + certified = {} + certified['identity'] = identities_registry.from_handled_data(certified_data['uid'], + certified_data['pubkey'], + BlockchainState.VALIDATED) + certified['cert_time'] = certified_data['cert_time']['medianTime'] + certified_list.append(certified) + return certified_list + + def unique_valid_certified_by(self, identities_registry, community): + certified_list = self.certified_by(identities_registry, community) unique_valid = [] # add certifiers of uid for certified in tuple(certified_list): # add only valid certification... - if community.certification_expired(certified['cert_time']['medianTime']): + if community.certification_expired(certified['cert_time']): continue # keep only the latest certification - already_found = [c['pubkey'] for c in unique_valid] - if certified['pubkey'] in already_found: - index = already_found.index(certified['pubkey']) - if certified['cert_time']['medianTime'] > unique_valid[index]['cert_time']['medianTime']: + already_found = [c['identity'].pubkey for c in unique_valid] + if certified['identity'].pubkey in already_found: + index = already_found.index(certified['identity'].pubkey) + if certified['cert_time'] > unique_valid[index]['cert_time']: unique_valid[index] = certified else: unique_valid.append(certified) @@ -303,11 +325,12 @@ class Identity(QObject): """ data = {'uid': self.uid, 'pubkey': self.pubkey, - 'status': self.status} + 'local_state': self.local_state, + 'blockchain_state': self.blockchain_state} return data def __str__(self): - status_str = ("NOT_FOUND", "FOUND") - return "{0} - {1} - {2}".format(self.uid, + return "{0} - {1} - {2} - {3}".format(self.uid, self.pubkey, - status_str[self.status]) \ No newline at end of file + self.local_state, + self.blockchain_state) diff --git a/src/cutecoin/gui/community_tab.py b/src/cutecoin/gui/community_tab.py index 35b47cf7fdf65398ba96d1d8ab5ec031b2edbe4f..38caf2856b55550ad36694514ccf8fb7328c3073 100644 --- a/src/cutecoin/gui/community_tab.py +++ b/src/cutecoin/gui/community_tab.py @@ -96,7 +96,7 @@ class CommunityTabWidget(QWidget, Ui_CommunityTabWidget): pubkey_index = model.sourceModel().index(source_index.row(), pubkey_col) pubkey = model.sourceModel().data(pubkey_index, Qt.DisplayRole) - identity = self.app.identities_registry.lookup(pubkey, self.community) + identity = self.app.identities_registry.find(pubkey, self.community) menu = QMenu(self) informations = QAction(self.tr("Informations"), self) @@ -235,7 +235,7 @@ class CommunityTabWidget(QWidget, Ui_CommunityTabWidget): pubkeys = self.community.members_pubkeys() identities = [] for p in pubkeys: - identities.append(self.app.identities_registry.lookup(p, self.community)) + identities.append(self.app.identities_registry.find(p, self.community)) self_identity = self.account.identity(self.community) @@ -266,11 +266,11 @@ class CommunityTabWidget(QWidget, Ui_CommunityTabWidget): raise account_connections = [] - for p in self_identity.unique_valid_certifiers_of(self.community): - account_connections.append(self.app.identities_registry.lookup(p['pubkey'], self.community)) + for p in self_identity.unique_valid_certifiers_of(self.app.identities_registry, self.community): + account_connections.append(p['identity']) certifiers_of = [p for p in account_connections] - for p in self_identity.unique_valid_certified_by(self.community): - account_connections.append(self.app.identities_registry.lookup(p['pubkey'], self.community)) + for p in self_identity.unique_valid_certified_by(self.app.identities_registry, self.community): + account_connections.append(p['identity']) certified_by = [p for p in account_connections if p.pubkey not in [i.pubkey for i in certifiers_of]] identities = certifiers_of + certified_by diff --git a/src/cutecoin/gui/currency_tab.py b/src/cutecoin/gui/currency_tab.py index 4041e88f4e02bc898c36f9400007e17cc24539e5..04224f0a30856a18e19c95257bbcc43d18298eb1 100644 --- a/src/cutecoin/gui/currency_tab.py +++ b/src/cutecoin/gui/currency_tab.py @@ -109,7 +109,7 @@ class CurrencyTabWidget(QWidget, Ui_CurrencyTabWidget): logging.debug("Refresh block") self.status_info.clear() try: - person = self.app.identities_registry.lookup(self.app.current_account.pubkey, self.community) + person = self.app.identities_registry.find(self.app.current_account.pubkey, self.community) expiration_time = person.membership_expiration_time(self.community) sig_validity = self.community.parameters['sigValidity'] warning_expiration_time = int(sig_validity / 3) @@ -125,7 +125,7 @@ class CurrencyTabWidget(QWidget, Ui_CurrencyTabWidget): toast.display(self.tr("Membership expiration"), self.tr("<b>Warning : Membership expiration in {0} days</b>").format(days)) - certifiers_of = person.unique_valid_certifiers_of(self.community) + certifiers_of = person.unique_valid_certifiers_of(self.app.identities_registry, self.community) if len(certifiers_of) < self.community.parameters['sigQty']: self.status_info.append('warning_certifications') if self.app.preferences['notifications']: diff --git a/src/cutecoin/gui/wallets_tab.py b/src/cutecoin/gui/wallets_tab.py index ec52c17f5cf87de8638a24e4eaf3ad391117525e..36c27ef130d558daa01b129c4326c2eaa9ed1280 100644 --- a/src/cutecoin/gui/wallets_tab.py +++ b/src/cutecoin/gui/wallets_tab.py @@ -71,8 +71,8 @@ class WalletsTabWidget(QWidget, Ui_WalletsTab): last_renewal = None expiration = None - certified = identity.unique_valid_certified_by(self.community) - certifiers = identity.unique_valid_certifiers_of(self.community) + certified = identity.unique_valid_certified_by(self.app.identities_registry, self.community) + certifiers = identity.unique_valid_certifiers_of(self.app.identities_registry, self.community) if last_renewal and expiration: date_renewal = QLocale.toString( QLocale(), diff --git a/src/cutecoin/gui/wot_tab.py b/src/cutecoin/gui/wot_tab.py index a3299f1225e84cafccc1ee601ff23e922b45b2f9..ac600f732bfbce87b630243158079c24e8f4d8ba 100644 --- a/src/cutecoin/gui/wot_tab.py +++ b/src/cutecoin/gui/wot_tab.py @@ -79,8 +79,8 @@ class WotTabWidget(QWidget, Ui_WotTabWidget): identity.inner_data_changed.connect(self.handle_identity_change) # create Identity from node metadata - certifier_list = identity.certifiers_of(self.community) - certified_list = identity.certified_by(self.community) + certifier_list = identity.certifiers_of(self.app.identities_registry, self.community) + certified_list = identity.certified_by(self.app.identities_registry, self.community) # create empty graph instance graph = Graph(self.community)