Skip to content

Commit 29ea53e

Browse files
fix: make custom server setup more resilient (#1277)
1 parent 0d837fa commit 29ea53e

3 files changed

Lines changed: 26 additions & 1 deletion

File tree

src/writer/app_runner.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,9 @@ def _handle_session_init(
171171
if session is None:
172172
raise MessageHandlingException("Session rejected.")
173173

174+
for mail in payload.additionalMail:
175+
session.session_state.add_log_entry(**mail.model_dump())
176+
174177
user_state = {}
175178
try:
176179
user_state = session.session_state.user_state.to_dict()

src/writer/serve.py

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import tempfile
1414
import textwrap
1515
import time
16+
import traceback
1617
import typing
1718
from contextlib import asynccontextmanager, suppress
1819
from importlib.machinery import ModuleSpec
@@ -121,6 +122,8 @@ def get_asgi_app(
121122
global app
122123
if serve_mode not in ["run", "edit"]:
123124
raise ValueError("""Invalid mode. Must be either "run" or "edit".""")
125+
126+
custom_server_setup_mail: list[dict] = []
124127

125128
_fix_mimetype()
126129
app_runner = AppRunner(user_app_path, serve_mode)
@@ -351,6 +354,7 @@ async def init(
351354
cookies=dict(request.cookies),
352355
headers=dict(request.headers),
353356
proposedSessionId=initBody.proposedSessionId,
357+
additionalMail=custom_server_setup_mail,
354358
)
355359
)
356360

@@ -960,7 +964,17 @@ async def stream(websocket: WebSocket):
960964

961965
# Return
962966
if enable_server_setup is True:
963-
_execute_server_setup_hook(user_app_path)
967+
try:
968+
_execute_server_setup_hook(user_app_path)
969+
except Exception as e:
970+
custom_server_setup_mail.append(
971+
{
972+
"type": "error",
973+
"title": "Custom server setup error",
974+
"message": str(e),
975+
"code": traceback.format_exc()
976+
}
977+
)
964978

965979
return app
966980

src/writer/ss_types.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,10 +139,18 @@ class AppProcessServerRequest(BaseModel):
139139
payload: Optional[Any] = None
140140

141141

142+
class AdditionalMail(BaseModel):
143+
type: Literal["info", "error"]
144+
title: str
145+
message: str
146+
code: Optional[str] = None
147+
148+
142149
class InitSessionRequestPayload(BaseModel):
143150
cookies: Optional[Dict[str, str]] = None
144151
headers: Optional[Dict[str, str]] = None
145152
proposedSessionId: Optional[str] = None
153+
additionalMail: list[AdditionalMail] = []
146154

147155

148156
class InitSessionRequest(AppProcessServerRequest):

0 commit comments

Comments
 (0)