Skip to content

Commit 8dc1034

Browse files
committed
make websockets compatible with python3.10
Signed-off-by: Harmouch101 <[email protected]>
1 parent 72498af commit 8dc1034

File tree

5 files changed

+21
-4
lines changed

5 files changed

+21
-4
lines changed

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@
8787
"requests>=2.16.0,<3.0.0",
8888
# remove typing_extensions after python_requires>=3.8, see web3._utils.compat
8989
"typing-extensions>=3.7.4.1,<4;python_version<'3.8'",
90-
"websockets>=9.1,<10",
90+
"websockets>=9.1,<=10.0",
9191
],
9292
python_requires='>=3.6,<4',
9393
extras_require=extras_require,

tests/core/providers/test_websocket_provider.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@
1717
from web3.providers.websocket import (
1818
WebsocketProvider,
1919
)
20+
from web3.providers.websockets_compatibility import (
21+
loop_if_py_lt_38,
22+
)
2023

2124
if sys.version_info >= (3, 8):
2225
from asyncio.exceptions import (
@@ -37,7 +40,7 @@ async def empty_server(websocket, path):
3740
data = await websocket.recv()
3841
await asyncio.sleep(0.02)
3942
await websocket.send(data)
40-
server = websockets.serve(empty_server, '127.0.0.1', open_port, loop=event_loop)
43+
server = websockets.serve(empty_server, '127.0.0.1', open_port, **loop_if_py_lt_38(event_loop))
4144
event_loop.run_until_complete(server)
4245
event_loop.run_forever()
4346

tests/utils.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@
44

55
import websockets
66

7+
from web3.providers.websockets_compatibility import (
8+
loop_if_py_lt_38,
9+
)
710

811
def get_open_port():
912
sock = socket.socket()
@@ -17,7 +20,7 @@ async def wait_for_ws(endpoint_uri, event_loop, timeout=60):
1720
start = time.time()
1821
while time.time() < start + timeout:
1922
try:
20-
async with websockets.connect(uri=endpoint_uri, loop=event_loop):
23+
async with websockets.connect(uri=endpoint_uri, **loop_if_py_lt_38(event_loop)):
2124
pass
2225
except (ConnectionRefusedError, OSError):
2326
await asyncio.sleep(0.01)

web3/providers/websocket.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
RPCEndpoint,
3636
RPCResponse,
3737
)
38+
from .websockets_compatibility import loop_if_py_lt_38
3839

3940
RESTRICTED_WEBSOCKET_KWARGS = {'uri', 'loop'}
4041
DEFAULT_WEBSOCKET_TIMEOUT = 10
@@ -70,7 +71,7 @@ def __init__(
7071
async def __aenter__(self) -> WebSocketClientProtocol:
7172
if self.ws is None:
7273
self.ws = await connect(
73-
uri=self.endpoint_uri, loop=self.loop, **self.websocket_kwargs
74+
uri=self.endpoint_uri, **loop_if_py_lt_38(self.loop), **self.websocket_kwargs
7475
)
7576
return self.ws
7677

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import asyncio
2+
import sys
3+
from typing import Any, Dict
4+
5+
6+
def loop_if_py_lt_38(loop: asyncio.AbstractEventLoop) -> Dict[str, Any]:
7+
"""
8+
Helper for the removal of the loop argument in Python 3.10.
9+
"""
10+
return {"loop": loop} if sys.version_info[:2] < (3, 8) else {}

0 commit comments

Comments
 (0)