Skip to content

Commit fb25932

Browse files
Fall back to legacy protocol if selected_subprotocol raises exception (#706)
1 parent 05baa15 commit fb25932

File tree

1 file changed

+15
-7
lines changed

1 file changed

+15
-7
lines changed

jupyter_server/services/kernels/handlers.py

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,14 @@ def iopub_data_rate_limit(self):
140140
def rate_limit_window(self):
141141
return self.settings.get("rate_limit_window", 1.0)
142142

143+
@property
144+
def subprotocol(self):
145+
try:
146+
protocol = self.selected_subprotocol
147+
except Exception:
148+
protocol = None
149+
return protocol
150+
143151
def __repr__(self):
144152
return "%s(%s)" % (
145153
self.__class__.__name__,
@@ -484,7 +492,7 @@ def on_message(self, ws_msg):
484492
self.log.debug("Received message on closed websocket %r", ws_msg)
485493
return
486494

487-
if self.selected_subprotocol == "v1.kernel.websocket.jupyter.org":
495+
if self.subprotocol == "v1.kernel.websocket.jupyter.org":
488496
channel, msg_list = deserialize_msg_from_ws_v1(ws_msg)
489497
msg = {
490498
"header": None,
@@ -515,7 +523,7 @@ def on_message(self, ws_msg):
515523
ignore_msg = True
516524
if not ignore_msg:
517525
stream = self.channels[channel]
518-
if self.selected_subprotocol == "v1.kernel.websocket.jupyter.org":
526+
if self.subprotocol == "v1.kernel.websocket.jupyter.org":
519527
self.session.send_raw(stream, msg_list)
520528
else:
521529
self.session.send(stream, msg)
@@ -533,7 +541,7 @@ def get_part(self, field, value, msg_list):
533541
def _on_zmq_reply(self, stream, msg_list):
534542
idents, fed_msg_list = self.session.feed_identities(msg_list)
535543

536-
if self.selected_subprotocol == "v1.kernel.websocket.jupyter.org":
544+
if self.subprotocol == "v1.kernel.websocket.jupyter.org":
537545
msg = {"header": None, "parent_header": None, "content": None}
538546
else:
539547
msg = self.session.deserialize(fed_msg_list)
@@ -546,7 +554,7 @@ def _on_zmq_reply(self, stream, msg_list):
546554
if self._limit_rate(channel, msg, parts):
547555
return
548556

549-
if self.selected_subprotocol == "v1.kernel.websocket.jupyter.org":
557+
if self.subprotocol == "v1.kernel.websocket.jupyter.org":
550558
super(ZMQChannelsHandler, self)._on_zmq_reply(stream, parts)
551559
else:
552560
super(ZMQChannelsHandler, self)._on_zmq_reply(stream, msg)
@@ -558,7 +566,7 @@ def write_stderr(self, error_message, parent_header):
558566
content={"text": error_message + "\n", "name": "stderr"},
559567
parent=parent_header,
560568
)
561-
if self.selected_subprotocol == "v1.kernel.websocket.jupyter.org":
569+
if self.subprotocol == "v1.kernel.websocket.jupyter.org":
562570
bin_msg = serialize_msg_to_ws_v1(err_msg, "iopub", self.session.pack)
563571
self.write_message(bin_msg, binary=True)
564572
else:
@@ -736,7 +744,7 @@ def _send_status_message(self, status):
736744
# that all messages from the stopped kernel have been delivered
737745
iopub.flush()
738746
msg = self.session.msg("status", {"execution_state": status})
739-
if self.selected_subprotocol == "v1.kernel.websocket.jupyter.org":
747+
if self.subprotocol == "v1.kernel.websocket.jupyter.org":
740748
bin_msg = serialize_msg_to_ws_v1(msg, "iopub", self.session.pack)
741749
self.write_message(bin_msg, binary=True)
742750
else:
@@ -762,7 +770,7 @@ def _on_error(self, channel, msg, msg_list):
762770
msg["content"]["ename"] = "ExecutionError"
763771
msg["content"]["evalue"] = "Execution error"
764772
msg["content"]["traceback"] = [self.kernel_manager.traceback_replacement_message]
765-
if self.selected_subprotocol == "v1.kernel.websocket.jupyter.org":
773+
if self.subprotocol == "v1.kernel.websocket.jupyter.org":
766774
msg_list[3] = self.session.pack(msg["content"])
767775

768776

0 commit comments

Comments
 (0)