Skip to content
Snippets Groups Projects
Commit 8402a53f authored by Vincent Texier's avatar Vincent Texier
Browse files

Fix exception after closing certifier information window #769

parent e6b88941
No related branches found
No related tags found
1 merge request!770Fix exception after closing certifier information window #769
from sakia.errors import NoPeerAvailable
from sakia.data.entities import Identity
from sakia.data.entities import Identity, Certification
from sakia.data.processors import BlockchainProcessor
from PyQt5.QtCore import QAbstractTableModel, QSortFilterProxyModel, Qt, \
QDateTime, QModelIndex, QLocale, QT_TRANSLATE_NOOP
......@@ -16,7 +16,7 @@ class CertifiersFilterProxyModel(QSortFilterProxyModel):
def columnCount(self, parent):
return len(CertifiersTableModel.columns_ids) - 2
def lessThan(self, left, right):
"""
Sort table by given column number.
......@@ -108,47 +108,56 @@ class CertifiersTableModel(QAbstractTableModel):
self.connection = connection
self.blockchain_service = blockchain_service
self.identities_service = identities_service
self._certifiers_data = []
self._certifiers_data = list()
def certifier_data(self, certification):
def init_certifiers(self):
"""
Init table with data to display
"""
self.beginResetModel()
certifications = self.identities_service.certifications_received(self.connection.pubkey)
logging.debug("Refresh {0} certifiers".format(len(certifications)))
certifiers_data = []
for certifier in certifications:
certifiers_data.append(self.certifier_data(certifier))
self._certifiers_data = certifiers_data
self.endResetModel()
def certifier_data(self, certification: Certification) -> tuple:
"""
Return the identity in the form a tuple to display
:param sakia.data.entities.Certification certification: The certification to get data from
:param Certification certification: The certification to get data from
:return: The certification data in the form of a tuple
:rtype: tuple
"""
parameters = self.blockchain_service.parameters()
publication_date = certification.timestamp
identity = self.identities_service.get_identity(certification.certifier)
if not identity:
identity = Identity(currency=certification.currency, pubkey=certification.certifier, uid="")
written = certification.written_on >= 0
if written:
expiration_date = publication_date + parameters.sig_validity
else:
expiration_date = publication_date + parameters.sig_window
return identity.uid, identity.pubkey, publication_date, expiration_date, written, identity
def certifier_loaded(self, identity):
for i, idty in enumerate(self.identities_data):
if idty[CertifiersTableModel.columns_ids.index('identity')] == identity:
self._certifiers_data[i] = self._certifiers_data(identity)
self.dataChanged.emit(self.index(i, 0), self.index(i, len(CertifiersTableModel.columns_ids)))
return
identity = self.identities_service.get_identity(certification.certifier)
if not identity:
identity = Identity(currency=certification.currency, pubkey=certification.certifier, uid="")
def init_certifiers(self):
"""
Change the identities to display
return identity.uid, identity.pubkey, publication_date, expiration_date, written, identity
def certifier_loaded(self, identity: Identity):
"""
self.beginResetModel()
certifications = self.identities_service.certifications_received(self.connection.pubkey)
logging.debug("Refresh {0} certifiers".format(len(certifications)))
certifiers_data = []
for certifier in certifications:
certifiers_data.append(self.certifier_data(certifier))
Update identity of certifier after closing information window
self._certifiers_data = certifiers_data
self.endResetModel()
:param Identity identity: Updated identity of the certifier
:return:
"""
for i, certifier_data in enumerate(self._certifiers_data):
if certifier_data[CertifiersTableModel.columns_ids.index('identity')] == identity:
self._certifiers_data[i] = update_certifier_data_from_identity(certifier_data, identity)
self.dataChanged.emit(self.index(i, 0), self.index(i, len(CertifiersTableModel.columns_ids)))
return
def rowCount(self, parent):
return len(self._certifiers_data)
......@@ -170,3 +179,24 @@ class CertifiersTableModel(QAbstractTableModel):
def flags(self, index):
return Qt.ItemIsSelectable | Qt.ItemIsEnabled
#######################
# STATIC FUNCTIONS
#######################
def update_certifier_data_from_identity(certifier_data: tuple, identity: Identity) -> tuple:
"""
Return certifier data from updated identity
:param tuple certifier_data: Certifier data list
:param Identity identity: Identity of the certifier
:return tuple:
"""
return identity.uid, \
identity.pubkey, \
certifier_data[CertifiersTableModel.columns_ids.index('publication')], \
certifier_data[CertifiersTableModel.columns_ids.index('expiration')], \
certifier_data[CertifiersTableModel.columns_ids.index('written')], \
identity
......@@ -75,7 +75,7 @@ class IdentitiesService(QObject):
for c in connections:
identities.append(self._identities_processor.get_identity(self.currency, c.pubkey))
return identities
def is_identity_of_connection(self, identity):
return identity.pubkey in self._connections_processor.pubkeys()
......@@ -485,7 +485,7 @@ class IdentitiesService(QObject):
"""
Get the list of certifications received by a given identity
:param str pubkey: the pubkey
:rtype: List[sakia.data.entities.Certifications]
:rtype: list[Certification]
"""
return self._certs_processor.certifications_received(self.currency, pubkey)
......@@ -493,6 +493,6 @@ class IdentitiesService(QObject):
"""
Get the list of certifications received by a given identity
:param str pubkey: the pubkey
:rtype: List[sakia.data.entities.Certifications]
:rtype: list[Certification]
"""
return self._certs_processor.certifications_sent(self.currency, pubkey)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment