Skip to content
Snippets Groups Projects
Unverified Commit 3b434279 authored by inso's avatar inso Committed by GitHub
Browse files

Merge pull request #770 from vtexier/dev

Fix exception after closing certifier information window #769
parents e6b88941 8402a53f
No related branches found
No related tags found
No related merge requests found
from sakia.errors import NoPeerAvailable 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 sakia.data.processors import BlockchainProcessor
from PyQt5.QtCore import QAbstractTableModel, QSortFilterProxyModel, Qt, \ from PyQt5.QtCore import QAbstractTableModel, QSortFilterProxyModel, Qt, \
QDateTime, QModelIndex, QLocale, QT_TRANSLATE_NOOP QDateTime, QModelIndex, QLocale, QT_TRANSLATE_NOOP
...@@ -108,47 +108,56 @@ class CertifiersTableModel(QAbstractTableModel): ...@@ -108,47 +108,56 @@ class CertifiersTableModel(QAbstractTableModel):
self.connection = connection self.connection = connection
self.blockchain_service = blockchain_service self.blockchain_service = blockchain_service
self.identities_service = identities_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 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 :return: The certification data in the form of a tuple
:rtype: tuple :rtype: tuple
""" """
parameters = self.blockchain_service.parameters() parameters = self.blockchain_service.parameters()
publication_date = certification.timestamp 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 written = certification.written_on >= 0
if written: if written:
expiration_date = publication_date + parameters.sig_validity expiration_date = publication_date + parameters.sig_validity
else: else:
expiration_date = publication_date + parameters.sig_window expiration_date = publication_date + parameters.sig_window
return identity.uid, identity.pubkey, publication_date, expiration_date, written, identity
def certifier_loaded(self, identity): identity = self.identities_service.get_identity(certification.certifier)
for i, idty in enumerate(self.identities_data): if not identity:
if idty[CertifiersTableModel.columns_ids.index('identity')] == identity: identity = Identity(currency=certification.currency, pubkey=certification.certifier, uid="")
self._certifiers_data[i] = self._certifiers_data(identity)
self.dataChanged.emit(self.index(i, 0), self.index(i, len(CertifiersTableModel.columns_ids)))
return
def init_certifiers(self): return identity.uid, identity.pubkey, publication_date, expiration_date, written, identity
"""
Change the identities to display def certifier_loaded(self, identity: Identity):
""" """
self.beginResetModel() Update identity of certifier after closing information window
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 :param Identity identity: Updated identity of the certifier
self.endResetModel() :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): def rowCount(self, parent):
return len(self._certifiers_data) return len(self._certifiers_data)
...@@ -170,3 +179,24 @@ class CertifiersTableModel(QAbstractTableModel): ...@@ -170,3 +179,24 @@ class CertifiersTableModel(QAbstractTableModel):
def flags(self, index): def flags(self, index):
return Qt.ItemIsSelectable | Qt.ItemIsEnabled 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
...@@ -485,7 +485,7 @@ class IdentitiesService(QObject): ...@@ -485,7 +485,7 @@ class IdentitiesService(QObject):
""" """
Get the list of certifications received by a given identity Get the list of certifications received by a given identity
:param str pubkey: the pubkey :param str pubkey: the pubkey
:rtype: List[sakia.data.entities.Certifications] :rtype: list[Certification]
""" """
return self._certs_processor.certifications_received(self.currency, pubkey) return self._certs_processor.certifications_received(self.currency, pubkey)
...@@ -493,6 +493,6 @@ class IdentitiesService(QObject): ...@@ -493,6 +493,6 @@ class IdentitiesService(QObject):
""" """
Get the list of certifications received by a given identity Get the list of certifications received by a given identity
:param str pubkey: the pubkey :param str pubkey: the pubkey
:rtype: List[sakia.data.entities.Certifications] :rtype: list[Certification]
""" """
return self._certs_processor.certifications_sent(self.currency, pubkey) 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.
Please register or to comment