Skip to content

Commit dff1599

Browse files
Carreaukrassowskidavidbrochart
authored
Better error message when starting kernel for session. (#1478)
Co-authored-by: Michał Krassowski <[email protected]> Co-authored-by: David Brochart <[email protected]>
1 parent 111e104 commit dff1599

File tree

5 files changed

+38
-19
lines changed

5 files changed

+38
-19
lines changed

examples/simple/simple_ext1/handlers.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ def get(self):
1818
self.log.info(f"Extension Name in {self.name} Default Handler: {self.name}")
1919
# A method for getting the url to static files (prefixed with /static/<name>).
2020
self.log.info(
21-
"Static URL for / in simple_ext1 Default Handler: {}".format(self.static_url(path="/"))
21+
"Static URL for / in simple_ext1 Default Handler: %s",
22+
self.static_url(path="/"),
2223
)
2324
self.write("<h1>Hello Simple 1 - I am the default...</h1>")
2425
self.write(f"Config in {self.name} Default Handler: {self.config}")

jupyter_server/gateway/managers.py

+8-6
Original file line numberDiff line numberDiff line change
@@ -632,9 +632,10 @@ async def get_msg(self, *args: Any, **kwargs: Any) -> dict[str, Any]:
632632
timeout = kwargs.get("timeout", 1)
633633
msg = await self._async_get(timeout=timeout)
634634
self.log.debug(
635-
"Received message on channel: {}, msg_id: {}, msg_type: {}".format(
636-
self.channel_name, msg["msg_id"], msg["msg_type"] if msg else "null"
637-
)
635+
"Received message on channel: %s, msg_id: %s, msg_type: %s",
636+
self.channel_name,
637+
msg["msg_id"],
638+
msg["msg_type"] if msg else "null",
638639
)
639640
self.task_done()
640641
return cast("dict[str, Any]", msg)
@@ -643,9 +644,10 @@ def send(self, msg: dict[str, Any]) -> None:
643644
"""Send a message to the queue."""
644645
message = json.dumps(msg, default=ChannelQueue.serialize_datetime).replace("</", "<\\/")
645646
self.log.debug(
646-
"Sending message on channel: {}, msg_id: {}, msg_type: {}".format(
647-
self.channel_name, msg["msg_id"], msg["msg_type"] if msg else "null"
648-
)
647+
"Sending message on channel: %s, msg_id: %s, msg_type: %s",
648+
self.channel_name,
649+
msg["msg_id"],
650+
msg["msg_type"] if msg else "null",
649651
)
650652
self.channel_socket.send(message)
651653

jupyter_server/services/contents/handlers.py

+3-4
Original file line numberDiff line numberDiff line change
@@ -210,10 +210,9 @@ async def patch(self, path=""):
210210
async def _copy(self, copy_from, copy_to=None):
211211
"""Copy a file, optionally specifying a target directory."""
212212
self.log.info(
213-
"Copying {copy_from} to {copy_to}".format(
214-
copy_from=copy_from,
215-
copy_to=copy_to or "",
216-
)
213+
"Copying %r to %r",
214+
copy_from,
215+
copy_to or "",
217216
)
218217
model = await ensure_async(self.contents_manager.copy(copy_from, copy_to))
219218
self.set_status(201)

jupyter_server/services/sessions/handlers.py

+24-8
Original file line numberDiff line numberDiff line change
@@ -161,14 +161,30 @@ async def patch(self, session_id):
161161
changes["kernel_id"] = kernel_id
162162
elif model["kernel"].get("name") is not None:
163163
kernel_name = model["kernel"]["name"]
164-
kernel_id = await sm.start_kernel_for_session(
165-
session_id,
166-
kernel_name=kernel_name,
167-
name=before["name"],
168-
path=before["path"],
169-
type=before["type"],
170-
)
171-
changes["kernel_id"] = kernel_id
164+
165+
try:
166+
kernel_id = await sm.start_kernel_for_session(
167+
session_id,
168+
kernel_name=kernel_name,
169+
name=before["name"],
170+
path=before["path"],
171+
type=before["type"],
172+
)
173+
changes["kernel_id"] = kernel_id
174+
except Exception as e:
175+
# the error message may contain sensitive information, so we want to
176+
# be careful with it, thus we only give the short repr of the exception
177+
# and the full traceback.
178+
# this should be fine as we are exposing here the same info as when we start a new kernel
179+
msg = "The '%s' kernel could not be started: %s" % (
180+
kernel_name,
181+
repr(str(e)),
182+
)
183+
status_msg = "Error starting kernel %s" % kernel_name
184+
self.log.error("Error starting kernel: %s", kernel_name)
185+
self.set_status(501)
186+
self.finish(json.dumps({"message": msg, "short_message": status_msg}))
187+
return
172188

173189
await sm.update_session(session_id, **changes)
174190
s_model = await sm.get_session(session_id=session_id)

pyproject.toml

+1
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,7 @@ extend-select = [
142142
"B", # flake8-bugbear
143143
"I", # isort
144144
"UP", # pyupgrade
145+
"G001", # no % or f formatting in logs, prevents sttructured logging
145146
]
146147
unfixable = [
147148
# Don't touch print statements

0 commit comments

Comments
 (0)