From 565327153a1841e35343bef3aae6b8fa7f512b4f Mon Sep 17 00:00:00 2001 From: inso <insomniak.fr@gmaiL.com> Date: Tue, 20 Feb 2018 10:45:52 +0100 Subject: [PATCH] Fix aiohttp and attrs compat --- requirements.txt | 5 +++-- src/sakia/app.py | 4 ++-- src/sakia/data/connectors/bma.py | 2 +- src/sakia/data/connectors/node.py | 14 +++++++------- src/sakia/data/entities/connection.py | 2 +- src/sakia/data/repositories/blockchains.py | 6 +++--- src/sakia/data/repositories/certifications.py | 4 ++-- src/sakia/data/repositories/connections.py | 8 +++++--- src/sakia/data/repositories/contacts.py | 2 +- src/sakia/data/repositories/dividends.py | 2 +- src/sakia/data/repositories/identities.py | 2 +- src/sakia/data/repositories/nodes.py | 2 +- src/sakia/data/repositories/sources.py | 2 +- src/sakia/data/repositories/transactions.py | 2 +- 14 files changed, 30 insertions(+), 27 deletions(-) diff --git a/requirements.txt b/requirements.txt index 0c3a6b43..3c377eed 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,10 +1,11 @@ quamash asynctest networkx -attrs<=17.2 +attrs duniter-mirage duniterpy>=0.40 pytest pytest-asyncio<0.6 pyyaml -aiohttp<3 \ No newline at end of file +aiohttp +async_timeout \ No newline at end of file diff --git a/src/sakia/app.py b/src/sakia/app.py index 997b88a4..e198750c 100644 --- a/src/sakia/app.py +++ b/src/sakia/app.py @@ -3,7 +3,7 @@ import datetime import logging import socket import i18n_rc - +import async_timeout import aiohttp from PyQt5.QtCore import QObject, pyqtSignal, QTranslator, QCoreApplication, QLocale, Qt from . import __version__ @@ -194,7 +194,7 @@ class Application(QObject): async def get_last_version(self): try: async with aiohttp.ClientSession() as session: - with aiohttp.Timeout(15): + async with async_timeout.timeout(10): response = await session.get("https://api.github.com/repos/duniter/sakia/releases", proxy=self.parameters.proxy()) if response.status == 200: diff --git a/src/sakia/data/connectors/bma.py b/src/sakia/data/connectors/bma.py index 2076a781..154c5ff5 100644 --- a/src/sakia/data/connectors/bma.py +++ b/src/sakia/data/connectors/bma.py @@ -217,7 +217,7 @@ class BmaConnector: else: answers[data_hash].append(node) finally: - session.close() + await session.close() if len(answers_data) > 0: if request is bma.wot.lookup: diff --git a/src/sakia/data/connectors/node.py b/src/sakia/data/connectors/node.py index b8253819..d4a716ad 100644 --- a/src/sakia/data/connectors/node.py +++ b/src/sakia/data/connectors/node.py @@ -136,7 +136,7 @@ class NodeConnector(QObject): else: closed = True await asyncio.sleep(0) - self.session.close() + await self.session.close() def refresh(self, manual=False): """ @@ -166,13 +166,13 @@ class NodeConnector(QObject): self._connected['block'] = True self._logger.debug("Connected successfully to block ws") async for msg in ws: - if msg.tp == aiohttp.WSMsgType.TEXT: + if msg.type == aiohttp.WSMsgType.TEXT: self._logger.debug("Received a block") block_data = bma.parse_text(msg.data, bma.ws.WS_BLOCk_SCHEMA) await self.refresh_block(block_data) - elif msg.tp == aiohttp.WSMsgType.CLOSED: + elif msg.type == aiohttp.WSMsgType.CLOSED: break - elif msg.tp == aiohttp.WSMsgType.ERROR: + elif msg.type == aiohttp.WSMsgType.ERROR: break except (aiohttp.WSServerHandshakeError, ValueError) as e: self._logger.debug("Websocket block {0} : {1}".format(type(e).__name__, str(e))) @@ -290,13 +290,13 @@ class NodeConnector(QObject): self._connected['peer'] = True self._logger.debug("Connected successfully to peer ws") async for msg in ws: - if msg.tp == aiohttp.WSMsgType.TEXT: + if msg.type == aiohttp.WSMsgType.TEXT: self._logger.debug("Received a peer") peer_data = bma.parse_text(msg.data, bma.ws.WS_PEER_SCHEMA) self.refresh_peer_data(peer_data) - elif msg.tp == aiohttp.WSMsgType.CLOSED: + elif msg.type == aiohttp.WSMsgType.CLOSED: break - elif msg.tp == aiohttp.WSMsgType.ERROR: + elif msg.type == aiohttp.WSMsgType.ERROR: break except (aiohttp.WSServerHandshakeError, ValueError) as e: self._logger.debug("Websocket peer {0} : {1}" diff --git a/src/sakia/data/entities/connection.py b/src/sakia/data/entities/connection.py index 6b313691..3fd7d7e5 100644 --- a/src/sakia/data/entities/connection.py +++ b/src/sakia/data/entities/connection.py @@ -17,7 +17,7 @@ class Connection: scrypt_r = attr.ib(convert=int, default=16, cmp=False, hash=False) scrypt_p = attr.ib(convert=int, default=1, cmp=False, hash=False) blockstamp = attr.ib(convert=block_uid, default=BlockUID.empty(), cmp=False, hash=False) - salt = attr.ib(convert=str, init=False, cmp=False, hash=False) + salt = attr.ib(convert=str, init=False, default="", cmp=False, hash=False) password = attr.ib(init=False, convert=str, default="", cmp=False, hash=False) def is_identity(self): diff --git a/src/sakia/data/repositories/blockchains.py b/src/sakia/data/repositories/blockchains.py index de897b35..272a5b3f 100644 --- a/src/sakia/data/repositories/blockchains.py +++ b/src/sakia/data/repositories/blockchains.py @@ -10,7 +10,7 @@ class BlockchainsRepo: """The repository for Blockchain entities. """ _conn = attr.ib() # :type sqlite3.Connection - _primary_keys = (Blockchain.currency,) + _primary_keys = (attr.fields(Blockchain).currency,) def insert(self, blockchain): """ @@ -18,7 +18,7 @@ class BlockchainsRepo: :param sakia.data.entities.Blockchain blockchain: the blockchain to commit """ blockchain_tuple = attr.astuple(blockchain.parameters) \ - + attr.astuple(blockchain, filter=attr.filters.exclude(Blockchain.parameters)) + + attr.astuple(blockchain, filter=attr.filters.exclude(attr.fields(Blockchain).parameters)) values = ",".join(['?'] * len(blockchain_tuple)) self._conn.execute("INSERT INTO blockchains VALUES ({0})".format(values), blockchain_tuple) @@ -28,7 +28,7 @@ class BlockchainsRepo: :param sakia.data.entities.Blockchain blockchain: the blockchain to update """ updated_fields = attr.astuple(blockchain, filter=attr.filters.exclude( - Blockchain.parameters, *BlockchainsRepo._primary_keys)) + attr.fields(Blockchain).parameters, *BlockchainsRepo._primary_keys)) where_fields = attr.astuple(blockchain, filter=attr.filters.include(*BlockchainsRepo._primary_keys)) self._conn.execute("""UPDATE blockchains SET current_buid=?, diff --git a/src/sakia/data/repositories/certifications.py b/src/sakia/data/repositories/certifications.py index 2ae93580..d51e5a8e 100644 --- a/src/sakia/data/repositories/certifications.py +++ b/src/sakia/data/repositories/certifications.py @@ -8,8 +8,8 @@ class CertificationsRepo: """The repository for Communities entities. """ _conn = attr.ib() # :type sqlite3.Connection - _primary_keys = (Certification.currency, Certification.certified, - Certification.certifier, Certification.block,) + _primary_keys = (attr.fields(Certification).currency, attr.fields(Certification).certified, + attr.fields(Certification).certifier, attr.fields(Certification).block,) def insert(self, certification): """ diff --git a/src/sakia/data/repositories/connections.py b/src/sakia/data/repositories/connections.py index 5a80c97a..ef9b3450 100644 --- a/src/sakia/data/repositories/connections.py +++ b/src/sakia/data/repositories/connections.py @@ -9,14 +9,15 @@ class ConnectionsRepo: The repository for Connections entities. """ _conn = attr.ib() # :type sqlite3.Connection - _primary_keys = (Connection.currency, Connection.pubkey) + _primary_keys = (attr.fields(Connection).currency, attr.fields(Connection).pubkey) def insert(self, connection): """ Commit a connection to the database :param sakia.data.entities.Connection connection: the connection to commit """ - connection_tuple = attr.astuple(connection, filter=attr.filters.exclude(Connection.password, Connection.salt)) + connection_tuple = attr.astuple(connection, filter=attr.filters.exclude(attr.fields(Connection).password, + attr.fields(Connection).salt)) values = ",".join(['?'] * len(connection_tuple)) self._conn.execute("INSERT INTO connections VALUES ({0})".format(values), connection_tuple) @@ -25,7 +26,8 @@ class ConnectionsRepo: Update an existing connection in the database :param sakia.data.entities.Connection connection: the certification to update """ - updated_fields = attr.astuple(connection, filter=attr.filters.exclude(Connection.password, Connection.salt, + updated_fields = attr.astuple(connection, filter=attr.filters.exclude(attr.fields(Connection).password, + attr.fields(Connection).salt, *ConnectionsRepo._primary_keys)) where_fields = attr.astuple(connection, filter=attr.filters.include(*ConnectionsRepo._primary_keys)) diff --git a/src/sakia/data/repositories/contacts.py b/src/sakia/data/repositories/contacts.py index 14ed377f..6b38e409 100644 --- a/src/sakia/data/repositories/contacts.py +++ b/src/sakia/data/repositories/contacts.py @@ -9,7 +9,7 @@ class ContactsRepo: The repository for Contacts entities. """ _conn = attr.ib() # :type sqlite3.Contact - _primary_keys = (Contact.contact_id,) + _primary_keys = (attr.fields(Contact).contact_id,) def insert(self, contact): """ diff --git a/src/sakia/data/repositories/dividends.py b/src/sakia/data/repositories/dividends.py index 41ba667f..da1a74e5 100644 --- a/src/sakia/data/repositories/dividends.py +++ b/src/sakia/data/repositories/dividends.py @@ -8,7 +8,7 @@ class DividendsRepo: """The repository for Communities entities. """ _conn = attr.ib() # :type sqlite3.Connection - _primary_keys = (Dividend.currency, Dividend.pubkey, Dividend.block_number) + _primary_keys = (attr.fields(Dividend).currency, attr.fields(Dividend).pubkey, attr.fields(Dividend).block_number) def insert(self, dividend): """ diff --git a/src/sakia/data/repositories/identities.py b/src/sakia/data/repositories/identities.py index 6867d8ef..c136250b 100644 --- a/src/sakia/data/repositories/identities.py +++ b/src/sakia/data/repositories/identities.py @@ -10,7 +10,7 @@ class IdentitiesRepo: """The repository for Identities entities. """ _conn = attr.ib() # :type sqlite3.Connection - _primary_keys = (Identity.currency, Identity.pubkey, Identity.uid, Identity.blockstamp) + _primary_keys = (attr.fields(Identity).currency, attr.fields(Identity).pubkey, attr.fields(Identity).uid, attr.fields(Identity).blockstamp) def insert(self, identity): """ diff --git a/src/sakia/data/repositories/nodes.py b/src/sakia/data/repositories/nodes.py index 368a0e85..7ff4a0ec 100644 --- a/src/sakia/data/repositories/nodes.py +++ b/src/sakia/data/repositories/nodes.py @@ -9,7 +9,7 @@ class NodesRepo: """The repository for Communities entities. """ _conn = attr.ib() # :type sqlite3.Connection - _primary_keys = (Node.currency, Node.pubkey) + _primary_keys = (attr.fields(Node).currency, attr.fields(Node).pubkey) def insert(self, node): """ diff --git a/src/sakia/data/repositories/sources.py b/src/sakia/data/repositories/sources.py index 58ac6c7b..5b346e96 100644 --- a/src/sakia/data/repositories/sources.py +++ b/src/sakia/data/repositories/sources.py @@ -8,7 +8,7 @@ class SourcesRepo: """The repository for Communities entities. """ _conn = attr.ib() # :type sqlite3.Connection - _primary_keys = (Source.currency, Source.pubkey, Source.identifier, Source.noffset) + _primary_keys = (attr.fields(Source).currency, attr.fields(Source).pubkey, attr.fields(Source).identifier, attr.fields(Source).noffset) def insert(self, source): """ diff --git a/src/sakia/data/repositories/transactions.py b/src/sakia/data/repositories/transactions.py index 4a657a61..5607f770 100644 --- a/src/sakia/data/repositories/transactions.py +++ b/src/sakia/data/repositories/transactions.py @@ -8,7 +8,7 @@ class TransactionsRepo: """The repository for Communities entities. """ _conn = attr.ib() # :type sqlite3.Connection - _primary_keys = (Transaction.currency, Transaction.pubkey, Transaction.sha_hash,) + _primary_keys = (attr.fields(Transaction).currency, attr.fields(Transaction).pubkey, attr.fields(Transaction).sha_hash,) def insert(self, transaction): """ -- GitLab