1+ import  datetime 
12import  json 
23import  logging 
34import  uuid 
@@ -95,14 +96,21 @@ def _get_execute_request(
9596                    "session" : self .session_id ,
9697                    "msg_type" : "execute_request" ,
9798                    "version" : "5.3" ,
99+                     "date" : datetime .datetime .now (datetime .timezone .utc ).isoformat (),
98100                },
99101                "parent_header" : {},
100-                 "metadata" : {},
102+                 "metadata" : {
103+                     "trusted" : True ,
104+                     "deletedCells" : [],
105+                     "recordTiming" : False ,
106+                     "cellId" : str (uuid .uuid4 ()),
107+                 },
101108                "content" : {
102109                    "code" : code ,
103110                    "silent" : background ,
104111                    "store_history" : True ,
105112                    "user_expressions" : {},
113+                     "stop_on_error" : True ,
106114                    "allow_stdin" : False ,
107115                },
108116            }
@@ -127,10 +135,25 @@ async def _wait_for_result(self, message_id: str):
127135
128136            yield  output .model_dump (exclude_none = True )
129137
130-     async  def  change_current_directory (self , path : Union [str , StrictStr ]):
138+     async  def  change_current_directory (
139+         self , path : Union [str , StrictStr ], language : str 
140+     ):
131141        message_id  =  str (uuid .uuid4 ())
132142        self ._executions [message_id ] =  Execution (in_background = True )
133-         request  =  self ._get_execute_request (message_id , f"%cd { path }  , True )
143+         if  language  ==  "python" :
144+             request  =  self ._get_execute_request (message_id , f"%cd { path }  , True )
145+         elif  language  ==  "deno" :
146+             request  =  self ._get_execute_request (
147+                 message_id , f"Deno.chdir('{ path }  , True 
148+             )
149+         elif  language  ==  "r" :
150+             request  =  self ._get_execute_request (message_id , f"setwd('{ path }  , True )
151+         elif  language  ==  "java" :
152+             request  =  self ._get_execute_request (
153+                 message_id , f"System.setProperty('user.dir', '{ path }  , True 
154+             )
155+         else :
156+             return 
134157
135158        await  self ._ws .send (request )
136159
@@ -165,11 +188,12 @@ async def execute(
165188                        indent  =  len (line ) -  len (line .lstrip ())
166189                        break 
167190
168-                 code  =  (
169-                     indent  *  " " 
170-                     +  f"os.environ.set_envs_for_execution({ vars_to_set } \n " 
171-                     +  code 
172-                 )
191+                 if  self .language  ==  "python" :
192+                     code  =  (
193+                         indent  *  " " 
194+                         +  f"os.environ.set_envs_for_execution({ vars_to_set } \n " 
195+                         +  code 
196+                     )
173197
174198            logger .info (code )
175199            request  =  self ._get_execute_request (message_id , code , False )
@@ -192,7 +216,9 @@ async def _receive_message(self):
192216            async  for  message  in  self ._ws :
193217                await  self ._process_message (json .loads (message ))
194218        except  Exception  as  e :
195-             logger .error (f"WebSocket received error while receiving messages: { e }  )
219+             logger .error (
220+                 f"WebSocket received error while receiving messages: { type (e )} { str (e )}  
221+             )
196222
197223    async  def  _process_message (self , data : dict ):
198224        """ 
@@ -308,11 +334,21 @@ async def _process_message(self, data: dict):
308334                execution .errored  =  True 
309335                await  queue .put (
310336                    Error (
311-                         name = data ["content" ][ "ename" ] ,
312-                         value = data ["content" ][ "evalue" ] ,
313-                         traceback = "" .join (data ["content" ][ "traceback" ] ),
337+                         name = data ["content" ]. get ( "ename" ,  "" ) ,
338+                         value = data ["content" ]. get ( "evalue" ,  "" ) ,
339+                         traceback = "" .join (data ["content" ]. get ( "traceback" , []) ),
314340                    )
315341                )
342+             elif  data ["content" ]["status" ] ==  "abort" :
343+                 logger .debug (f"Execution { parent_msg_ig }  )
344+                 await  queue .put (
345+                     Error (
346+                         name = "ExecutionAborted" ,
347+                         value = "Execution was aborted" ,
348+                         traceback = "" ,
349+                     )
350+                 )
351+                 await  queue .put (EndOfExecution ())
316352            elif  data ["content" ]["status" ] ==  "ok" :
317353                pass 
318354
0 commit comments