From d73cafeeaa62b59bb9ba9297455696389a8da1a7 Mon Sep 17 00:00:00 2001 From: inso <insomniak.fr@gmaiL.com> Date: Sat, 8 Apr 2017 12:25:25 +0200 Subject: [PATCH] Fix connection remove cleaning --- src/sakia/app.py | 8 ++------ src/sakia/data/processors/certifications.py | 16 ++------------- src/sakia/data/processors/identities.py | 20 ++++++++++++++++--- .../gui/dialogs/connection_cfg/controller.py | 4 +--- 4 files changed, 22 insertions(+), 26 deletions(-) diff --git a/src/sakia/app.py b/src/sakia/app.py index b706b6c5..0805c360 100644 --- a/src/sakia/app.py +++ b/src/sakia/app.py @@ -107,7 +107,7 @@ class Application(QObject): nodes_processor = NodesProcessor(self.db.nodes_repo) bma_connector = BmaConnector(nodes_processor, self.parameters) connections_processor = ConnectionsProcessor(self.db.connections_repo) - identities_processor = IdentitiesProcessor(self.db.identities_repo, self.db.blockchains_repo, bma_connector) + identities_processor = IdentitiesProcessor(self.db.identities_repo, self.db.certifications_repo, self.db.blockchains_repo, bma_connector) certs_processor = CertificationsProcessor(self.db.certifications_repo, self.db.identities_repo, bma_connector) blockchain_processor = BlockchainProcessor.instanciate(self) sources_processor = SourcesProcessor.instanciate(self) @@ -144,9 +144,8 @@ class Application(QObject): connections_processor = ConnectionsProcessor.instanciate(self) connections_processor.remove_connections(connection) - IdentitiesProcessor.instanciate(self).cleanup_connection(connection) - CertificationsProcessor.instanciate(self).cleanup_connection(connection, connections_processor.pubkeys()) + IdentitiesProcessor.instanciate(self).cleanup_connection(connection) SourcesProcessor.instanciate(self).drop_all_of(currency=connection.currency, pubkey=connection.pubkey) @@ -154,9 +153,6 @@ class Application(QObject): TransactionsProcessor.instanciate(self).cleanup_connection(connection, connections_processor.pubkeys()) - if not connections_processor.connections(): - NodesProcessor.instanciate(self).drop_all(self.currency) - self.db.commit() def switch_language(self): diff --git a/src/sakia/data/processors/certifications.py b/src/sakia/data/processors/certifications.py index 0f042bf3..0c956ae3 100644 --- a/src/sakia/data/processors/certifications.py +++ b/src/sakia/data/processors/certifications.py @@ -114,24 +114,12 @@ class CertificationsProcessor: :param List[str] connections_pubkeys: pubkeys of existing connections :return: """ - def clean_unused_identity(pubkey): - others_certs = self._certifications_repo.get_all(currency=connection.currency, - certifier=pubkey) - others_certs += self._certifications_repo.get_all(currency=connection.currency, - certified=pubkey) - if not others_certs: - idty = self._identities_repo.get_one(currency=connection.currency, pubkey=pubkey) - if idty: - self._identities_repo.drop(idty) - certifiers = self._certifications_repo.get_all(currency=connection.currency, certifier=connection.pubkey) for c in certifiers: - self._certifications_repo.drop(c) if c.certified not in connections_pubkeys: - clean_unused_identity(c.certified) + self._certifications_repo.drop(c) certified = self._certifications_repo.get_all(currency=connection.currency, certified=connection.pubkey) for c in certified: - self._certifications_repo.drop(c) if c.certifier not in connections_pubkeys: - clean_unused_identity(c.certifier) \ No newline at end of file + self._certifications_repo.drop(c) \ No newline at end of file diff --git a/src/sakia/data/processors/identities.py b/src/sakia/data/processors/identities.py index 0db94626..a8288afb 100644 --- a/src/sakia/data/processors/identities.py +++ b/src/sakia/data/processors/identities.py @@ -15,7 +15,16 @@ from sakia.errors import NoPeerAvailable @attr.s class IdentitiesProcessor: + """ + + :param _identities_repo: sakia.data.repositories.IdentitiesRepo + :param _certifications_repo: sakia.data.repositories.IdentitiesRepo + :param _blockchain_repo: sakia.data.repositories.BlockchainRepo + :param _bma_connector: sakia.data.connectors.bma.BmaConnector + :param _logger: + """ _identities_repo = attr.ib() # :type sakia.data.repositories.IdentitiesRepo + _certifications_repo = attr.ib() # :type sakia.data.repositories.IdentitiesRepo _blockchain_repo = attr.ib() # :type sakia.data.repositories.BlockchainRepo _bma_connector = attr.ib() # :type sakia.data.connectors.bma.BmaConnector _logger = attr.ib(default=attr.Factory(lambda: logging.getLogger('sakia'))) @@ -26,7 +35,7 @@ class IdentitiesProcessor: Instanciate a blockchain processor :param sakia.app.Application app: the app """ - return cls(app.db.identities_repo, app.db.blockchains_repo, + return cls(app.db.identities_repo, app.db.certifications_repo, app.db.blockchains_repo, BmaConnector(NodesProcessor(app.db.nodes_repo), app.parameters)) async def find_from_pubkey(self, currency, pubkey): @@ -240,6 +249,11 @@ class IdentitiesProcessor: :param sakia.data.entities.Connectionb connection: :return: """ - identities = self._identities_repo.get_all(currency=connection.currency, pubkey=connection.pubkey) + identities = self._identities_repo.get_all(currency=connection.currency) for idty in identities: - self._identities_repo.drop(idty) + others_certs = self._certifications_repo.get_all(currency=connection.currency, + certifier=idty.pubkey) + others_certs += self._certifications_repo.get_all(currency=connection.currency, + certified=idty.pubkey) + if not others_certs: + self._identities_repo.drop(idty) diff --git a/src/sakia/gui/dialogs/connection_cfg/controller.py b/src/sakia/gui/dialogs/connection_cfg/controller.py index 83e6efcf..8c11b6bc 100644 --- a/src/sakia/gui/dialogs/connection_cfg/controller.py +++ b/src/sakia/gui/dialogs/connection_cfg/controller.py @@ -65,9 +65,7 @@ class ConnectionConfigController(QObject): """ view = ConnectionConfigView(parent.view if parent else None) model = ConnectionConfigModel(None, app, None, - IdentitiesProcessor(app.db.identities_repo, app.db.blockchains_repo, - BmaConnector(NodesProcessor(app.db.nodes_repo), - app.parameters))) + IdentitiesProcessor.instanciate(app)) account_cfg = cls(parent, view, model) model.setParent(account_cfg) view.set_license(app.currency) -- GitLab