From d920eb002af4659770d25b276eb96566df5e669b Mon Sep 17 00:00:00 2001
From: inso <insomniak.fr@gmaiL.com>
Date: Fri, 27 Jan 2017 12:46:54 +0100
Subject: [PATCH] Fix bug #584
---
src/sakia/data/graphs/base_graph.py | 15 ++++++++++-----
src/sakia/data/processors/identities.py | 2 +-
src/sakia/services/identities.py | 7 +++++--
3 files changed, 16 insertions(+), 8 deletions(-)
diff --git a/src/sakia/data/graphs/base_graph.py b/src/sakia/data/graphs/base_graph.py
index 5e9c303f..8c3544c5 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 1ed37605..82522528 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 cdb35def..fd848371 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)
--
GitLab