Browse Source

python 3.8: adapt to breaking changes re asyncio.CancelledError

(and TimeoutError)

closes #5798
hard-fail-on-bad-server-string
SomberNight 5 years ago
parent
commit
308517d473
No known key found for this signature in database GPG Key ID: B33B5F232C6271E9
  1. 1
      electrum/lnworker.py
  2. 4
      electrum/network.py
  3. 4
      electrum/tests/test_lnpeer.py
  4. 10
      electrum/tests/test_lntransport.py
  5. 1
      electrum/util.py

1
electrum/lnworker.py

@ -15,6 +15,7 @@ from datetime import datetime, timezone
from functools import partial from functools import partial
from collections import defaultdict from collections import defaultdict
import concurrent import concurrent
from concurrent import futures
import dns.resolver import dns.resolver
import dns.exception import dns.exception

4
electrum/network.py

@ -35,6 +35,8 @@ import ipaddress
import asyncio import asyncio
from typing import NamedTuple, Optional, Sequence, List, Dict, Tuple, TYPE_CHECKING from typing import NamedTuple, Optional, Sequence, List, Dict, Tuple, TYPE_CHECKING
import traceback import traceback
import concurrent
from concurrent import futures
import dns import dns
import dns.resolver import dns.resolver
@ -1204,7 +1206,7 @@ class Network(Logger):
fut = asyncio.run_coroutine_threadsafe(self._stop(full_shutdown=True), self.asyncio_loop) fut = asyncio.run_coroutine_threadsafe(self._stop(full_shutdown=True), self.asyncio_loop)
try: try:
fut.result(timeout=2) 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): async def _ensure_there_is_a_main_interface(self):
if self.is_connected(): if self.is_connected():

4
electrum/tests/test_lnpeer.py

@ -5,6 +5,8 @@ import os
from contextlib import contextmanager from contextlib import contextmanager
from collections import defaultdict from collections import defaultdict
import logging import logging
import concurrent
from concurrent import futures
from electrum.network import Network from electrum.network import Network
from electrum.ecc import ECPrivkey from electrum.ecc import ECPrivkey
@ -236,7 +238,7 @@ class TestPeer(ElectrumTestCase):
gath = asyncio.gather(pay(), p1._message_loop(), p2._message_loop()) gath = asyncio.gather(pay(), p1._message_loop(), p2._message_loop())
async def f(): async def f():
await gath await gath
with self.assertRaises(asyncio.CancelledError): with self.assertRaises(concurrent.futures.CancelledError):
run(f()) run(f())
def test_channel_usage_after_closing(self): def test_channel_usage_after_closing(self):

10
electrum/tests/test_lntransport.py

@ -38,7 +38,7 @@ class TestLNTransport(ElectrumTestCase):
asyncio.get_event_loop().run_until_complete(transport.handshake(epriv=e_priv)) asyncio.get_event_loop().run_until_complete(transport.handshake(epriv=e_priv))
def test_loop(self): def test_loop(self):
l = asyncio.get_event_loop() loop = asyncio.get_event_loop()
responder_shaked = asyncio.Event() responder_shaked = asyncio.Event()
server_shaked = asyncio.Event() server_shaked = asyncio.Event()
responder_key = ECPrivkey.generate_random_key() responder_key = ECPrivkey.generate_random_key()
@ -50,7 +50,7 @@ class TestLNTransport(ElectrumTestCase):
self.assertEqual(await t.read_messages().__anext__(), b'hello from client') self.assertEqual(await t.read_messages().__anext__(), b'hello from client')
responder_shaked.set() responder_shaked.set()
server_future = asyncio.ensure_future(asyncio.start_server(cb, '127.0.0.1', 42898)) 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(): async def connect():
peer_addr = LNPeerAddr('127.0.0.1', 42898, responder_key.get_public_key_bytes()) peer_addr = LNPeerAddr('127.0.0.1', 42898, responder_key.get_public_key_bytes())
t = LNTransport(initiator_key.get_secret_bytes(), peer_addr) t = LNTransport(initiator_key.get_secret_bytes(), peer_addr)
@ -59,6 +59,6 @@ class TestLNTransport(ElectrumTestCase):
self.assertEqual(await t.read_messages().__anext__(), b'hello from server') self.assertEqual(await t.read_messages().__anext__(), b'hello from server')
server_shaked.set() server_shaked.set()
asyncio.ensure_future(connect()) connect_future = asyncio.ensure_future(connect())
l.run_until_complete(responder_shaked.wait()) loop.run_until_complete(responder_shaked.wait())
l.run_until_complete(server_shaked.wait()) loop.run_until_complete(server_shaked.wait())

1
electrum/util.py

@ -1020,6 +1020,7 @@ def ignore_exceptions(func):
try: try:
return await func(*args, **kwargs) return await func(*args, **kwargs)
except asyncio.CancelledError: except asyncio.CancelledError:
# note: with python 3.8, CancelledError no longer inherits Exception, so this catch is redundant
raise raise
except Exception as e: except Exception as e:
pass pass

Loading…
Cancel
Save