@@ -102,7 +102,9 @@ async def conn(
102102 flags = {arg for arg in args if arg .startswith ("--" )}
103103 avail = [path for path in args [1 :] if os .path .exists (path )]
104104 out : list [str ] = [
105- path for path in args [1 :] if path not in avail
105+ path
106+ for path in args [1 :]
107+ if not (path in avail or path .startswith ("--" ))
106108 ]
107109 if not avail :
108110 ok = False
@@ -132,17 +134,28 @@ async def conn(
132134 msg ["err" ] = err
133135 writer .write (json .dumps (msg ).encode ())
134136
137+
138+ async def wrapper (
139+ self : Application , reader : asyncio .StreamReader , writer : asyncio .StreamWriter
140+ ) -> None :
135141 # addr = writer.get_extra_info("peername")
136142 # self.log(f"Received {message!r} from {addr!r}")
137143
138- await writer .drain ()
139- writer .close ()
140- await writer .wait_closed ()
144+ try :
145+ await conn (self , reader , writer )
146+ except Exception as exc :
147+ writer .write (
148+ f'{{"ok": false, err: "internal exception ({ type (exc ).__name__ } ): { str (exc )} "}}' .encode ()
149+ )
150+ finally :
151+ await writer .drain ()
152+ writer .close ()
153+ await writer .wait_closed ()
141154
142155
143156@work
144157async def start_server (self : Application ) -> None :
145- server = await asyncio .start_server (partial (conn , self ), "127.0.0.1" , 0 )
158+ server = await asyncio .start_server (partial (wrapper , self ), "127.0.0.1" , 0 )
146159 addr = server .sockets [0 ].getsockname ()
147160 self .call_after_refresh (self .notify , f"Serving on { addr } " )
148161 os .environ ["ROVR_IPC_PORT" ] = str (addr [1 ])
0 commit comments