Skip to content

Commit 6041898

Browse files
committed
handle internal exceptions
stupid asyncio
1 parent 4174b42 commit 6041898

1 file changed

Lines changed: 18 additions & 5 deletions

File tree

src/rovr/functions/ipc_receiver.py

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -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
144157
async 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

Comments
 (0)