diff --git a/src/sakia/app.py b/src/sakia/app.py index 7af98fba55f72419200870120601fc63ac39c3bc..49e1d2aa80725efb6fe8332228e0c8dafb6c1e1e 100644 --- a/src/sakia/app.py +++ b/src/sakia/app.py @@ -82,7 +82,7 @@ class Application(QObject): :param profile_name: :return: """ - self._parameters = UserParametersFile.in_config_path(self.options.config_path, profile_name).load_or_init() + self.parameters = UserParametersFile.in_config_path(self.options.config_path, profile_name).load_or_init() self.db = SakiaDatabase.load_or_init(self.options.config_path, profile_name) self.instanciate_services() diff --git a/src/sakia/data/entities/identity.py b/src/sakia/data/entities/identity.py index 4e1930efb0dc95be0e3abdf492b267bfa859abff..08b68dc1b5dfe570e487b9099f45258ba5a75876 100644 --- a/src/sakia/data/entities/identity.py +++ b/src/sakia/data/entities/identity.py @@ -13,8 +13,8 @@ class Identity: signature = attr.ib(convert=str, default="", cmp=False, hash=False) # Mediantime of the block referenced by blockstamp timestamp = attr.ib(convert=int, default=0, cmp=False, hash=False) - written_on = attr.ib(convert=block_uid, default=BlockUID.empty(), cmp=False, hash=False) - revoked_on = attr.ib(convert=block_uid, default=BlockUID.empty(), cmp=False, hash=False) + written_on = attr.ib(convert=int, default=0, cmp=False, hash=False) + revoked_on = attr.ib(convert=int, default=0, cmp=False, hash=False) member = attr.ib(validator=attr.validators.instance_of(bool), default=False, cmp=False, hash=False) membership_buid = attr.ib(convert=block_uid, default=BlockUID.empty(), cmp=False, hash=False) membership_timestamp = attr.ib(convert=int, default=0, cmp=False, hash=False) diff --git a/src/sakia/data/processors/certifications.py b/src/sakia/data/processors/certifications.py index 11c00629457da4fcd57de45816e6da4bda3150a2..08ca1dac06e542466a5e6da4d1a6d1cd586107a9 100644 --- a/src/sakia/data/processors/certifications.py +++ b/src/sakia/data/processors/certifications.py @@ -109,8 +109,7 @@ class CertificationsProcessor: blockstamp=certifier_data['sigDate'], member=certifier_data['isMember']) if certifier_data['written']: - certification.written_on = BlockUID(certifier_data['written']['number'], - certifier_data['written']['hash']) + certification.written_on = certifier_data['written']['number'] certifiers.append(certification) identities.append(other_identity) @@ -139,8 +138,7 @@ class CertificationsProcessor: blockstamp=certified_data['sigDate'], member=certified_data['isMember']) if certified_data['written']: - certification.written_on = BlockUID(certified_data['written']['number'], - certified_data['written']['hash']) + certification.written_on = certified_data['written']['number'] certified.append(certification) identities.append(other_identity) diff --git a/src/sakia/gui/dialogs/connection_cfg/controller.py b/src/sakia/gui/dialogs/connection_cfg/controller.py index ee9806780dbd1cd31c1a85f1503e8d4b31208aa8..76a3a911bcbe891c22eebb45e63e7ba2d21309a4 100644 --- a/src/sakia/gui/dialogs/connection_cfg/controller.py +++ b/src/sakia/gui/dialogs/connection_cfg/controller.py @@ -180,11 +180,10 @@ class ConnectionConfigController(QObject): self._logger.debug("Validate changes") self.model.app.db.commit() except (NoPeerAvailable, DuniterError) as e: - raise self._logger.debug(str(e)) self.view.stacked_pages.setCurrentWidget(self.view.page_connection) self.step_node = asyncio.Future() - self.step_node.set_result(True) + self.step_node.set_result(mode) self.step_key = asyncio.Future() asyncio.ensure_future(self.process()) return @@ -275,3 +274,6 @@ Yours : {0}, the network : {1}""".format(registered[1], registered[2]))) self.view.finished.connect(lambda r: future.set_result(r)) self.view.open() return future + + def exec(self): + return self.view.exec() \ No newline at end of file diff --git a/src/sakia/gui/main_window/toolbar/controller.py b/src/sakia/gui/main_window/toolbar/controller.py index df17200a8cacbc4b51fd96ab9dfa7ccedec5f180..c1d821c2ebab8c357b5dd9352e7bcc5aca295796 100644 --- a/src/sakia/gui/main_window/toolbar/controller.py +++ b/src/sakia/gui/main_window/toolbar/controller.py @@ -136,37 +136,6 @@ The process to join back the community later will have to be done again.""") await QAsyncMessageBox.critical(self, self.tr("UID"), result[1]) - async def refresh_quality_buttons(self): - try: - account_identity = self.app.identity(self.community) - published_uid = await account_identity.published_uid(self.community) - uid_is_revokable = await account_identity.uid_is_revokable(self.community) - if published_uid: - logging.debug("UID Published") - self.action_revoke_uid.setEnabled(uid_is_revokable) - is_member = await account_identity.is_member(self.community) - if is_member: - self.button_membership.setText(self.tr("Renew membership")) - self.button_membership.setEnabled(True) - self.button_certification.setEnabled(True) - self.action_publish_uid.setEnabled(False) - else: - logging.debug("Not a member") - self.button_membership.setText(self.tr("Send membership demand")) - self.button_membership.setEnabled(True) - self.action_publish_uid.setEnabled(False) - if await self.community.get_block(0) is not None: - self.button_certification.setEnabled(False) - else: - logging.debug("UID not published") - self.button_membership.setEnabled(False) - self.button_certification.setEnabled(False) - self.action_publish_uid.setEnabled(True) - except LookupFailureError: - self.button_membership.setEnabled(False) - self.button_certification.setEnabled(False) - self.action_publish_uid.setEnabled(False) - def set_account(self, account): """ Set current account @@ -196,6 +165,8 @@ The process to join back the community later will have to be done again.""") def open_create_account_dialog(self): ConnectionConfigController.create_connection(self, self.model.app).exec() + self.model.app.instanciate_services() + self.model.app.start_coroutines() def retranslateUi(self, widget): """ diff --git a/src/sakia/gui/navigation/txhistory/table_model.py b/src/sakia/gui/navigation/txhistory/table_model.py index 43cd35947229889db6afda8f9cc8b6eddf8a24ae..08fe5cb2a7947775e6fe8a0353a753b96b9b6a1c 100644 --- a/src/sakia/gui/navigation/txhistory/table_model.py +++ b/src/sakia/gui/navigation/txhistory/table_model.py @@ -252,11 +252,11 @@ class HistoryTableModel(QAbstractTableModel): except NoPeerAvailable: deposit = "Could not compute" - identity = self.identities_service.get_identity(transfer.receiver) + identity = self.identities_service.get_identity(transfer.issuer) if identity: sender = identity.uid else: - sender = "pub:{0}".format(transfer.receiver[:5]) + sender = "pub:{0}".format(transfer.issuer[:5]) date_ts = transfer.timestamp txid = transfer.txid diff --git a/src/sakia/services/identities.py b/src/sakia/services/identities.py index 92f3f54eb66417ba820f3d6195f271d0f1b4b696..e6c3f2c998b3b1eed16d370d6cf59e360efa2f1f 100644 --- a/src/sakia/services/identities.py +++ b/src/sakia/services/identities.py @@ -107,8 +107,7 @@ class IdentitiesService(QObject): timestamp=certifier_data["cert_time"]["medianTime"], signature=certifier_data['signature']) if certifier_data['written']: - cert.written_on = BlockUID(certifier_data['written']['number'], - certifier_data['written']['hash']) + cert.written_on = certifier_data['written']['number'] certifications.append(cert) # We save connections pubkeys if identity.pubkey in self._connections_processor.pubkeys(): @@ -139,8 +138,7 @@ class IdentitiesService(QObject): timestamp=certified_data["cert_time"]["medianTime"], signature=certified_data['signature']) if certified_data['written']: - cert.written_on = BlockUID(certified_data['written']['number'], - certified_data['written']['hash']) + cert.written_on = certified_data['written']['number'] certifications.append(cert) # We save connections pubkeys if identity.pubkey in self._connections_processor.pubkeys(): @@ -185,7 +183,7 @@ class IdentitiesService(QObject): # we update every written identities known locally for identity in connections_identities: if ms.issuer == identity: - identity.membership_written_on = block.blockUID + identity.membership_written_on = block.number identity.membership_type = "IN" identity.membership_buid = ms.membership_ts self._identities_processor.insert_or_update_identity(identity) @@ -197,7 +195,7 @@ class IdentitiesService(QObject): for ms in block.leavers: # we update every written identities known locally for identity in connections_identities: - identity.membership_written_on = block.blockUID + identity.membership_written_on = block.number identity.membership_type = "OUT" identity.membership_buid = ms.membership_ts self._identities_processor.insert_or_update_identity(identity) diff --git a/src/sakia/services/network.py b/src/sakia/services/network.py index 118cca89b7c0fac6e302d4d0536509b76cf50343..fd49ca190bff19b9e723610c784669743f173649 100644 --- a/src/sakia/services/network.py +++ b/src/sakia/services/network.py @@ -84,7 +84,8 @@ class NetworkService(QObject): Start network nodes crawling :return: """ - self._discovery_loop_task = asyncio.ensure_future(self.discover_network()) + if not self._discovery_loop_task: + self._discovery_loop_task = asyncio.ensure_future(self.discover_network()) def nodes(self): """ diff --git a/src/sakia/tests/functional/wot_tab/__init__.py b/src/sakia/tests/functional/wot_tab/__init__.py deleted file mode 100644 index 39ab2a0b56350baad834cb7fb0cfecb8223e1fcd..0000000000000000000000000000000000000000 --- a/src/sakia/tests/functional/wot_tab/__init__.py +++ /dev/null @@ -1 +0,0 @@ -__author__ = 'inso' diff --git a/src/sakia/tests/functional/wot_tab/test_wot_tab.py b/src/sakia/tests/functional/wot_tab/test_wot_tab.py deleted file mode 100644 index 1909885ac308248e38f03ed87f8f911c854dc90a..0000000000000000000000000000000000000000 --- a/src/sakia/tests/functional/wot_tab/test_wot_tab.py +++ /dev/null @@ -1,85 +0,0 @@ -import asyncio -import logging -import sys -import time -import unittest - -import aiohttp -from PyQt5.QtCore import QLocale -from sakia.core.net import Network, Node -from sakia.core.net.api.bma.access import BmaAccess -from sakia.gui.graphs.wot_tab import WotTabWidget - -from sakia.app import Application -from sakia.core import Account, Community, Wallet -from sakia.core.registry.identities import IdentitiesRegistry -from sakia.gui.password_asker import PasswordAskerDialog -from sakia.tests import QuamashTest -from sakia.tests.mocks.bma import nice_blockchain - - -class TestWotTab(unittest.TestCase, QuamashTest): - def setUp(self): - self.setUpQuamash() - QLocale.setDefault(QLocale("en_GB")) - self.identities_registry = IdentitiesRegistry() - - self.application = Application(self.qapplication, self.lp, self.identities_registry) - self.application.preferences['notifications'] = False - - self.mock_nice_blockchain = nice_blockchain.get_mock(self.lp) - self.node = Node(self.mock_nice_blockchain.peer(), - "", "HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk", - None, Node.ONLINE, - time.time(), {}, "duniter", "0.14.0", 0, session=aiohttp.ClientSession()) - self.network = Network.create(self.node) - self.bma_access = BmaAccess.create(self.network) - self.community = Community("test_currency", self.network, self.bma_access) - - self.wallet = Wallet(0, "7Aqw6Efa9EzE7gtsc8SveLLrM7gm6NEGoywSv4FJx6pZ", - "Wallet 1", self.identities_registry) - - # Salt/password : "testsakia/testsakia" - # Pubkey : 7Aqw6Efa9EzE7gtsc8SveLLrM7gm6NEGoywSv4FJx6pZ - self.account = Account("testsakia", "7Aqw6Efa9EzE7gtsc8SveLLrM7gm6NEGoywSv4FJx6pZ", - "john", [self.community], [self.wallet], [], self.identities_registry) - - self.password_asker = PasswordAskerDialog(self.account) - self.password_asker.password = "testsakia" - self.password_asker.remember = True - - def tearDown(self): - self.tearDownQuamash() - - def test_empty_wot_tab(self): - wot_tab = WotTabWidget(self.application) - future = asyncio.Future() - - def open_widget(): - wot_tab.widget.show() - return future - - async def async_open_widget(): - srv, port, url = await self.mock_nice_blockchain.create_server() - self.addCleanup(srv.close) - await open_widget() - await self.mock_nice_blockchain.close() - - def close_dialog(): - if wot_tab.widget.isVisible(): - wot_tab.widget.close() - future.set_result(True) - - async def exec_test(): - await asyncio.sleep(1) - self.assertTrue(wot_tab.widget.isVisible()) - self.lp.call_soon(close_dialog) - - asyncio.ensure_future(exec_test()) - self.lp.call_later(15, close_dialog) - self.lp.run_until_complete(async_open_widget()) - -if __name__ == '__main__': - logging.basicConfig( stream=sys.stderr ) - logging.getLogger().setLevel( logging.DEBUG ) - unittest.main() diff --git a/src/sakia/tests/unit/data/test_certifications_repo.py b/src/sakia/tests/unit/data/test_certifications_repo.py index 4126ade13bb3338c483e417f17874c52db1a20e2..4a1bb2bcfa871807a4cadcacbe5bfc38f21288c5 100644 --- a/src/sakia/tests/unit/data/test_certifications_repo.py +++ b/src/sakia/tests/unit/data/test_certifications_repo.py @@ -11,7 +11,7 @@ def test_add_get_drop_blockchain(meta_repo): 20, 1473108382, "H41/8OGV2W4CLKbE35kk5t1HJQsb3jEM0/QGLUf80CwJvGZf3HvVCcNtHPUFoUBKEDQO9mPK3KJkqOoxHpqHCw==", - None)) + 0)) certification = certifications_repo.get_one(currency="testcurrency", certifier="7Aqw6Efa9EzE7gtsc8SveLLrM7gm6NEGoywSv4FJx6pZ", certified="FADxcH5LmXGmGFgdixSes6nWnC4Vb4pRUBYT81zQRhjn", @@ -22,7 +22,7 @@ def test_add_get_drop_blockchain(meta_repo): assert certification.block == 20 assert certification.timestamp == 1473108382 assert certification.signature == "H41/8OGV2W4CLKbE35kk5t1HJQsb3jEM0/QGLUf80CwJvGZf3HvVCcNtHPUFoUBKEDQO9mPK3KJkqOoxHpqHCw==" - assert certification.written_on == BlockUID.empty() + assert certification.written_on == 0 certifications_repo.drop(certification) certification = certifications_repo.get_one(currency="testcurrency", certifier="7Aqw6Efa9EzE7gtsc8SveLLrM7gm6NEGoywSv4FJx6pZ", @@ -38,13 +38,13 @@ def test_add_get_multiple_certification(meta_repo): "FADxcH5LmXGmGFgdixSes6nWnC4Vb4pRUBYT81zQRhjn", 20, 1473108382, "H41/8OGV2W4CLKbE35kk5t1HJQsb3jEM0/QGLUf80CwJvGZf3HvVCcNtHPUFoUBKEDQO9mPK3KJkqOoxHpqHCw==", - "22-7518C700E78B56CC21FB1DDC6CBAB24E0FACC9A798F5ED8736EA007F38617D67")) + 22)) certifications_repo.insert(Certification("testcurrency", "FADxcH5LmXGmGFgdixSes6nWnC4Vb4pRUBYT81zQRhjn", "7Aqw6Efa9EzE7gtsc8SveLLrM7gm6NEGoywSv4FJx6pZ", 101, 1473108382, "H41/8OGV2W4CLKbE35kk5t1HJQsb3jEM0/QGLUf80CwJvGZf3HvVCcNtHPUFoUBKEDQO9mPK3KJkqOoxHpqHCw==", - "105-7518C700E78B56CC21FB1DDC6CBAB24E0FACC9A798F5ED8736EA007F38617D67")) + 105)) certifications = certifications_repo.get_all(currency="testcurrency") assert "testcurrency" in [i.currency for i in certifications] assert "FADxcH5LmXGmGFgdixSes6nWnC4Vb4pRUBYT81zQRhjn" in [i.certifier for i in certifications] @@ -61,14 +61,14 @@ def test_add_update_certification(meta_repo): 20, 1473108382, "H41/8OGV2W4CLKbE35kk5t1HJQsb3jEM0/QGLUf80CwJvGZf3HvVCcNtHPUFoUBKEDQO9mPK3KJkqOoxHpqHCw==", - None) + 0) certifications_repo.insert(certification) - certification.written_on = BlockUID(22, "148C700E78B56CC21FB1DDC6CBAB24E0FACC9A798F5ED8736EA007F38617D67") + certification.written_on = 22 certifications_repo.update(certification) cert2 = certifications_repo.get_one(currency="testcurrency", certifier="7Aqw6Efa9EzE7gtsc8SveLLrM7gm6NEGoywSv4FJx6pZ", certified="FADxcH5LmXGmGFgdixSes6nWnC4Vb4pRUBYT81zQRhjn", block=20) - assert cert2.written_on == BlockUID(22, "148C700E78B56CC21FB1DDC6CBAB24E0FACC9A798F5ED8736EA007F38617D67") + assert cert2.written_on == 22 diff --git a/src/sakia/tests/unit/data/test_identies_repo.py b/src/sakia/tests/unit/data/test_identies_repo.py index bb76e172b5ed5ce82203ec02c466cf322bbd5492..42fa6ad057b9ab7d2a4ac79d24087c67b951d89d 100644 --- a/src/sakia/tests/unit/data/test_identies_repo.py +++ b/src/sakia/tests/unit/data/test_identies_repo.py @@ -9,14 +9,7 @@ def test_add_get_drop_identity(meta_repo): "john", "20-7518C700E78B56CC21FB1DDC6CBAB24E0FACC9A798F5ED8736EA007F38617D67", "H41/8OGV2W4CLKbE35kk5t1HJQsb3jEM0/QGLUf80CwJvGZf3HvVCcNtHPUFoUBKEDQO9mPK3KJkqOoxHpqHCw==", - 1473108382, - None, - None, - False, - None, - 0, - '', - None)) + 1473108382)) identity = identities_repo.get_one(currency="testcurrency", pubkey="7Aqw6Efa9EzE7gtsc8SveLLrM7gm6NEGoywSv4FJx6pZ", uid="john", @@ -33,7 +26,7 @@ def test_add_get_drop_identity(meta_repo): assert identity.member == False assert identity.membership_buid == BlockUID.empty() assert identity.membership_timestamp == 0 - assert identity.membership_written_on == BlockUID.empty() + assert identity.membership_written_on == 0 identities_repo.drop(identity) identity = identities_repo.get_one(currency="testcurrency", pubkey="7Aqw6Efa9EzE7gtsc8SveLLrM7gm6NEGoywSv4FJx6pZ", @@ -43,32 +36,19 @@ def test_add_get_drop_identity(meta_repo): ) assert identity is None + def test_add_get_multiple_identity(meta_repo): identities_repo = IdentitiesRepo(meta_repo.conn) identities_repo.insert(Identity("testcurrency", "7Aqw6Efa9EzE7gtsc8SveLLrM7gm6NEGoywSv4FJx6pZ", "john", "20-7518C700E78B56CC21FB1DDC6CBAB24E0FACC9A798F5ED8736EA007F38617D67", "H41/8OGV2W4CLKbE35kk5t1HJQsb3jEM0/QGLUf80CwJvGZf3HvVCcNtHPUFoUBKEDQO9mPK3KJkqOoxHpqHCw==", - 1473108382, - None, - None, - False, - None, - 0, - '', - None)) + 1473108382)) identities_repo.insert(Identity("testcurrency", "FADxcH5LmXGmGFgdixSes6nWnC4Vb4pRUBYT81zQRhjn", "doe", "101-BAD49448A1AD73C978CEDCB8F137D20A5715EBAA739DAEF76B1E28EE67B2C00C", "H41/8OGV2W4CLKbE35kk5t1HJQsb3jEM0/QGLUf80CwJvGZf3HvVCcNtHPUFoUBKEDQO9mPK3KJkqOoxHpqHCw==", - 1455433535, - None, - None, - False, - None, - 0, - '', - None)) + 1455433535)) identities = identities_repo.get_all(currency="testcurrency") assert "testcurrency" in [i.currency for i in identities] assert "john" in [i.uid for i in identities] @@ -81,14 +61,7 @@ def test_add_update_identity(meta_repo): "john", "20-7518C700E78B56CC21FB1DDC6CBAB24E0FACC9A798F5ED8736EA007F38617D67", "H41/8OGV2W4CLKbE35kk5t1HJQsb3jEM0/QGLUf80CwJvGZf3HvVCcNtHPUFoUBKEDQO9mPK3KJkqOoxHpqHCw==", - 1473108382, - None, - None, - False, - None, - 0, - '', - None) + 1473108382) identities_repo.insert(identity) identity.member = True identities_repo.update(identity)