11from __future__ import annotations
22
3- import json
43import logging
54import threading
5+ import uuid
6+
67import requests
78
89from concurrent .futures import Future
@@ -94,14 +95,14 @@ def exec_cell(
9495 logger .debug (f"Creating new websocket connection to kernel { kernel_id } " )
9596 ws = self ._connect_to_kernel_ws (kernel_id , timeout = timeout )
9697
97- session_id = ws .send_execution_message (code , on_stdout , on_stderr , on_result )
98+ message_id = ws .send_execution_message (code , on_stdout , on_stderr , on_result )
9899 logger .debug (
99- f"Sent execution message to kernel { kernel_id } , session_id : { session_id } "
100+ f"Sent execution message to kernel { kernel_id } , message_id : { message_id } "
100101 )
101102
102- result = ws .get_result (session_id , timeout = timeout )
103+ result = ws .get_result (message_id , timeout = timeout )
103104 logger .debug (
104- f"Received result from kernel { kernel_id } , session_id : { session_id } , result: { result } "
105+ f"Received result from kernel { kernel_id } , message_id : { message_id } , result: { result } "
105106 )
106107
107108 return result
@@ -140,24 +141,26 @@ def create_kernel(
140141 :param timeout: Timeout for the kernel creation request.
141142 :return: Kernel id of the created kernel
142143 """
143- data = {"path" : cwd }
144+ data = {"path" : cwd , "kernel" : { "name" : "python3" }, "type" : "notebook" , "name" : str ( uuid . uuid4 ()) }
144145 if kernel_name :
145- data ["kernel_name" ] = kernel_name
146+ data ["kernel" ][ 'name' ] = kernel_name
146147 logger .debug (f"Creating kernel with data: { data } " )
147148
148149 response = requests .post (
149- f"{ self ._sandbox .get_protocol ()} ://{ self ._sandbox .get_hostname (8888 )} /api/kernels " ,
150+ f"{ self ._sandbox .get_protocol ()} ://{ self ._sandbox .get_hostname (8888 )} /api/sessions " ,
150151 json = data ,
151152 timeout = timeout ,
152153 )
153154 if not response .ok :
154155 raise KernelException (f"Failed to create kernel: { response .text } " )
155156
156- kernel_id = response .json ()["id" ]
157+ session_data = response .json ()
158+ kernel_id = session_data ["kernel" ]["id" ]
159+ session_id = session_data ["id" ]
157160 logger .debug (f"Created kernel { kernel_id } " )
158161
159162 threading .Thread (
160- target = self ._connect_to_kernel_ws , args = (kernel_id , timeout )
163+ target = self ._connect_to_kernel_ws , args = (kernel_id , session_id , timeout )
161164 ).start ()
162165 return kernel_id
163166
@@ -244,7 +247,7 @@ def close(self):
244247 ws .result ().close ()
245248
246249 def _connect_to_kernel_ws (
247- self , kernel_id : str , timeout : Optional [float ] = TIMEOUT
250+ self , kernel_id : str , session_id : Optional [ str ], timeout : Optional [float ] = TIMEOUT
248251 ) -> JupyterKernelWebSocket :
249252 """
250253 Establishes a WebSocket connection to a specified Jupyter kernel.
@@ -258,9 +261,13 @@ def _connect_to_kernel_ws(
258261 future = Future ()
259262 self ._connected_kernels [kernel_id ] = future
260263
264+ print (session_id )
265+ session_id = session_id or str (uuid .uuid4 ())
261266 ws = JupyterKernelWebSocket (
262267 url = f"{ self ._sandbox .get_protocol ('ws' )} ://{ self ._sandbox .get_hostname (8888 )} /api/kernels/{ kernel_id } /channels" ,
268+ session_id = session_id
263269 )
270+
264271 ws .connect (timeout = timeout )
265272 logger .debug (f"Connected to kernel's ({ kernel_id } ) websocket." )
266273
@@ -277,16 +284,13 @@ def _start_connecting_to_default_kernel(
277284 logger .debug ("Starting to connect to the default kernel" )
278285
279286 def setup_default_kernel ():
280- session_info = self ._sandbox .filesystem .read (
281- "/root/.jupyter/.session_info " , timeout = timeout
287+ kernel_id = self ._sandbox .filesystem .read (
288+ "/root/.jupyter/kernel_id " , timeout = timeout
282289 )
283- if session_info is None and not self ._sandbox .is_open :
284- return
290+ kernel_id = kernel_id .strip ()
285291
286- session_info = json .loads (session_info )
287- kernel_id = session_info ["kernel" ]["id" ]
288292 logger .debug (f"Default kernel id: { kernel_id } " )
289- self ._connect_to_kernel_ws (kernel_id , timeout = timeout )
293+ self ._connect_to_kernel_ws (kernel_id , None , timeout = timeout )
290294 self ._kernel_id_set .set_result (kernel_id )
291295
292296 threading .Thread (target = setup_default_kernel ).start ()
0 commit comments