diff --git a/src/sakia/data/graphs/base_graph.py b/src/sakia/data/graphs/base_graph.py index 5e9c303f4b6cf513e36fdae25f3b970dbc138e86..8c3544c5d3d6ee4de1dfa8b09e764865a282043e 100644 --- a/src/sakia/data/graphs/base_graph.py +++ b/src/sakia/data/graphs/base_graph.py @@ -66,11 +66,14 @@ class BaseGraph(QObject): """ # new node node_status = NodeStatus.NEUTRAL - if node_identity.pubkey == account_identity.pubkey: - node_status += NodeStatus.HIGHLIGHTED - if node_identity.member is False: - node_status += NodeStatus.OUT - return node_status + try: + if node_identity.pubkey == account_identity.pubkey: + node_status += NodeStatus.HIGHLIGHTED + if node_identity.member is False: + node_status += NodeStatus.OUT + return node_status + except AttributeError: + pass def confirmation_text(self, block_number): """ @@ -203,6 +206,7 @@ class BaseGraph(QObject): certifier = self.identities_service.get_identity(certification.certifier) if not certifier: certifier = await self.identities_service.find_from_pubkey(certification.certifier) + self.identities_service.insert_or_update_identity(certifier) node_status = await self.node_status(certifier, account_identity) self.add_certifier_node(certifier, identity, certification, node_status) except NoPeerAvailable as e: @@ -222,6 +226,7 @@ class BaseGraph(QObject): certified = self.identities_service.get_identity(certification.certified) if not certified: certified = await self.identities_service.find_from_pubkey(certification.certified) + self.identities_service.insert_or_update_identity(certified) node_status = await self.node_status(certified, account_identity) self.add_certified_node(identity, certified, certification, node_status) diff --git a/src/sakia/data/processors/identities.py b/src/sakia/data/processors/identities.py index 1ed376057894ad634625db4a3043a6d633608b01..8252252894408a979639eeb7c169a938e0c5d84a 100644 --- a/src/sakia/data/processors/identities.py +++ b/src/sakia/data/processors/identities.py @@ -153,7 +153,7 @@ class IdentitiesProcessor: req_args={'search': identity.pubkey}) identity_data = next((data for data in requirements_data["identities"] if data["pubkey"] == identity.pubkey)) - identity.member = identity_data['membershipExpiresIn'] > 0 and not identity_data['outdistanced'] + identity.member = identity_data['membershipExpiresIn'] > 0 identity.outdistanced = identity_data['outdistanced'] self.insert_or_update_identity(identity) except errors.DuniterError as e: diff --git a/src/sakia/services/identities.py b/src/sakia/services/identities.py index cdb35def4702b243b2c5ff5a2a328d3156fdd7bd..fd8483711ee5e1d4d212fe955e0204998899b8f9 100644 --- a/src/sakia/services/identities.py +++ b/src/sakia/services/identities.py @@ -377,12 +377,12 @@ class IdentitiesService(QObject): identity.blockstamp = block_uid(identity_data["meta"]["timestamp"]) identity.timestamp = await self._blockchain_processor.timestamp(self.currency, identity.blockstamp.number) identity.outdistanced = identity_data["outdistanced"] - identity.member = identity_data["membershipExpiresIn"] > 0 and not identity_data["outdistanced"] + identity.member = identity_data["membershipExpiresIn"] > 0 median_time = self._blockchain_processor.time(self.currency) expiration_time = self._blockchain_processor.parameters(self.currency).ms_validity identity.membership_timestamp = median_time - (expiration_time - identity_data["membershipExpiresIn"]) # We save connections pubkeys - if identity.pubkey in self._connections_processor.pubkeys(): + if self._identities_processor.get_identity(self.currency, identity.pubkey, identity.uid): self._identities_processor.insert_or_update_identity(identity) except errors.DuniterError as e: if e.ucode == errors.NO_MEMBER_MATCHING_PUB_OR_UID: @@ -431,6 +431,9 @@ class IdentitiesService(QObject): """ return await self._identities_processor.lookup(self.currency, text) + def insert_or_update_identity(self, identity): + return self._identities_processor.insert_or_update_identity(identity) + def get_identity(self, pubkey, uid=""): return self._identities_processor.get_identity(self.currency, pubkey, uid)