Skip to content

Commit 4db76ba

Browse files
committed
Fix kernel WebSocket protocol
1 parent c2275a7 commit 4db76ba

File tree

2 files changed

+14
-13
lines changed

2 files changed

+14
-13
lines changed

jupyter_server/services/kernels/connection/channels.py

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121

2222
from jupyter_server.transutils import _i18n
2323

24+
from ..websocket import KernelWebsocketHandler
2425
from .abc import KernelWebsocketConnectionABC
2526
from .base import (
2627
BaseKernelWebsocketConnection,
@@ -103,7 +104,7 @@ def write_message(self):
103104
# class-level registry of open sessions
104105
# allows checking for conflict on session-id,
105106
# which is used as a zmq identity and must be unique.
106-
_open_sessions: dict = {}
107+
_open_sessions: dict[str, KernelWebsocketHandler] = {}
107108
_open_sockets: MutableSet["ZMQChannelsWebsocketConnection"] = weakref.WeakSet()
108109

109110
_kernel_info_future: Future
@@ -391,7 +392,7 @@ def close(self):
391392
def disconnect(self):
392393
self.log.debug("Websocket closed %s", self.session_key)
393394
# unregister myself as an open session (only if it's really me)
394-
if self._open_sessions.get(self.session_key) is self:
395+
if self._open_sessions.get(self.session_key) is self.websocket_handler:
395396
self._open_sessions.pop(self.session_key)
396397

397398
if self.kernel_id in self.multi_kernel_manager:
@@ -536,16 +537,6 @@ def _reserialize_reply(self, msg_or_list, channel=None):
536537
else:
537538
return json.dumps(msg, default=json_default)
538539

539-
def select_subprotocol(self, subprotocols):
540-
preferred_protocol = self.kernel_ws_protocol
541-
if preferred_protocol is None:
542-
preferred_protocol = "v1.kernel.websocket.jupyter.org"
543-
elif preferred_protocol == "":
544-
preferred_protocol = None
545-
selected_subprotocol = preferred_protocol if preferred_protocol in subprotocols else None
546-
# None is the default, "legacy" protocol
547-
return selected_subprotocol
548-
549540
def _on_zmq_reply(self, stream, msg_list):
550541
# Sometimes this gets triggered when the on_close method is scheduled in the
551542
# eventloop but hasn't been called.

jupyter_server/services/kernels/websocket.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414

1515

1616
class KernelWebsocketHandler(WebSocketMixin, WebSocketHandler, JupyterHandler):
17-
"""The kernels websocket should connecte"""
17+
"""The kernels websocket should connect"""
1818

1919
auth_resource = AUTH_RESOURCE
2020

@@ -75,6 +75,16 @@ def on_close(self):
7575
self.connection.disconnect()
7676
self.connection = None
7777

78+
def select_subprotocol(self, subprotocols):
79+
preferred_protocol = self.connection.kernel_ws_protocol
80+
if preferred_protocol is None:
81+
preferred_protocol = "v1.kernel.websocket.jupyter.org"
82+
elif preferred_protocol == "":
83+
preferred_protocol = None
84+
selected_subprotocol = preferred_protocol if preferred_protocol in subprotocols else None
85+
# None is the default, "legacy" protocol
86+
return selected_subprotocol
87+
7888

7989
default_handlers = [
8090
(r"/api/kernels/%s/channels" % _kernel_id_regex, KernelWebsocketHandler),

0 commit comments

Comments
 (0)