tpython 3.8: adapt to breaking changes re asyncio.CancelledError - electrum - Electrum Bitcoin wallet HTML git clone https://git.parazyd.org/electrum DIR Log DIR Files DIR Refs DIR Submodules --- DIR commit 308517d473d18fdc5a377e7296e0e6ab3f6c92b8 DIR parent fa9b997c70586b2ddcd44b996ec04e35820f5653 HTML Author: SomberNight <somber.night@protonmail.com> Date: Wed, 11 Dec 2019 23:07:47 +0100 python 3.8: adapt to breaking changes re asyncio.CancelledError (and TimeoutError) closes #5798 Diffstat: M electrum/lnworker.py | 1 + M electrum/network.py | 4 +++- M electrum/tests/test_lnpeer.py | 4 +++- M electrum/tests/test_lntransport.py | 10 +++++----- M electrum/util.py | 1 + 5 files changed, 13 insertions(+), 7 deletions(-) --- DIR diff --git a/electrum/lnworker.py b/electrum/lnworker.py t@@ -15,6 +15,7 @@ from datetime import datetime, timezone from functools import partial from collections import defaultdict import concurrent +from concurrent import futures import dns.resolver import dns.exception DIR diff --git a/electrum/network.py b/electrum/network.py t@@ -35,6 +35,8 @@ import ipaddress import asyncio from typing import NamedTuple, Optional, Sequence, List, Dict, Tuple, TYPE_CHECKING import traceback +import concurrent +from concurrent import futures import dns import dns.resolver t@@ -1204,7 +1206,7 @@ class Network(Logger): fut = asyncio.run_coroutine_threadsafe(self._stop(full_shutdown=True), self.asyncio_loop) try: fut.result(timeout=2) - except (asyncio.TimeoutError, asyncio.CancelledError): pass + except (concurrent.futures.TimeoutError, concurrent.futures.CancelledError): pass async def _ensure_there_is_a_main_interface(self): if self.is_connected(): DIR diff --git a/electrum/tests/test_lnpeer.py b/electrum/tests/test_lnpeer.py t@@ -5,6 +5,8 @@ import os from contextlib import contextmanager from collections import defaultdict import logging +import concurrent +from concurrent import futures from electrum.network import Network from electrum.ecc import ECPrivkey t@@ -236,7 +238,7 @@ class TestPeer(ElectrumTestCase): gath = asyncio.gather(pay(), p1._message_loop(), p2._message_loop()) async def f(): await gath - with self.assertRaises(asyncio.CancelledError): + with self.assertRaises(concurrent.futures.CancelledError): run(f()) def test_channel_usage_after_closing(self): DIR diff --git a/electrum/tests/test_lntransport.py b/electrum/tests/test_lntransport.py t@@ -38,7 +38,7 @@ class TestLNTransport(ElectrumTestCase): asyncio.get_event_loop().run_until_complete(transport.handshake(epriv=e_priv)) def test_loop(self): - l = asyncio.get_event_loop() + loop = asyncio.get_event_loop() responder_shaked = asyncio.Event() server_shaked = asyncio.Event() responder_key = ECPrivkey.generate_random_key() t@@ -50,7 +50,7 @@ class TestLNTransport(ElectrumTestCase): self.assertEqual(await t.read_messages().__anext__(), b'hello from client') responder_shaked.set() server_future = asyncio.ensure_future(asyncio.start_server(cb, '127.0.0.1', 42898)) - l.run_until_complete(server_future) + loop.run_until_complete(server_future) async def connect(): peer_addr = LNPeerAddr('127.0.0.1', 42898, responder_key.get_public_key_bytes()) t = LNTransport(initiator_key.get_secret_bytes(), peer_addr) t@@ -59,6 +59,6 @@ class TestLNTransport(ElectrumTestCase): self.assertEqual(await t.read_messages().__anext__(), b'hello from server') server_shaked.set() - asyncio.ensure_future(connect()) - l.run_until_complete(responder_shaked.wait()) - l.run_until_complete(server_shaked.wait()) + connect_future = asyncio.ensure_future(connect()) + loop.run_until_complete(responder_shaked.wait()) + loop.run_until_complete(server_shaked.wait()) DIR diff --git a/electrum/util.py b/electrum/util.py t@@ -1020,6 +1020,7 @@ def ignore_exceptions(func): try: return await func(*args, **kwargs) except asyncio.CancelledError: + # note: with python 3.8, CancelledError no longer inherits Exception, so this catch is redundant raise except Exception as e: pass