Skip to content

Commit 7eceb28

Browse files
fix(transport): handle errors in _background_recv (#10)
1 parent c7765d1 commit 7eceb28

File tree

1 file changed

+13
-3
lines changed

1 file changed

+13
-3
lines changed

src/wokwi_client/transport.py

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ def __init__(self, token: str, url: str = TRANSPORT_DEFAULT_WS_URL):
3535
self._recv_task: Optional[asyncio.Task[None]] = None
3636
self._closed = False
3737

38-
async def connect(self) -> dict[str, Any]:
38+
async def connect(self, throw_error: bool = True) -> dict[str, Any]:
3939
self._ws = await websockets.connect(
4040
self._url,
4141
extra_headers={
@@ -49,7 +49,7 @@ async def connect(self) -> dict[str, Any]:
4949
hello_msg = cast(HelloMessage, hello)
5050
self._closed = False
5151
# Start background message processor
52-
self._recv_task = asyncio.create_task(self._background_recv())
52+
self._recv_task = asyncio.create_task(self._background_recv(throw_error))
5353
return {"version": hello_msg["appVersion"]}
5454

5555
async def close(self) -> None:
@@ -109,7 +109,7 @@ async def request(self, command: str, params: dict[str, Any]) -> ResponseMessage
109109
finally:
110110
del self._response_futures[msg_id]
111111

112-
async def _background_recv(self) -> None:
112+
async def _background_recv(self, throw_error: bool = True) -> None:
113113
try:
114114
while not self._closed and self._ws is not None:
115115
msg: IncomingMessage = await self._recv()
@@ -127,6 +127,16 @@ async def _background_recv(self) -> None:
127127
except Exception as e:
128128
warnings.warn(f"Background recv error: {e}", RuntimeWarning)
129129

130+
if throw_error:
131+
self._closed = True
132+
# Cancel all pending response futures
133+
for future in self._response_futures.values():
134+
if not future.done():
135+
future.set_exception(e)
136+
if self._ws:
137+
await self._ws.close()
138+
raise
139+
130140
async def _recv(self) -> IncomingMessage:
131141
if self._ws is None:
132142
raise WokwiError("Not connected")

0 commit comments

Comments
 (0)