@@ -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