@@ -50,6 +50,9 @@ def start(self, asynchronous: bool = True) -> None:
5050 raise OpalDSError (ValueError ("Failed to start R session: no session id returned" ))
5151 self .id = session ["id" ]
5252
53+ def is_started (self ) -> bool :
54+ return self .id is not None
55+
5356 def is_ready (self ) -> bool :
5457 if self .id is None :
5558 raise OpalDSError (ValueError ("R session not started" ))
@@ -77,16 +80,30 @@ def is_failed(self) -> bool:
7780 session = response .from_json ()
7881 return session .get ("state" , "" ).lower () == "failed"
7982
80- def get_state_message (self ) -> str :
83+ def is_terminated (self ) -> bool :
8184 if self .id is None :
8285 raise OpalDSError (ValueError ("R session not started" ))
8386 response = self ._get (UriBuilder (["datashield" , "session" , self .id ]).build ()).send ()
8487 if response .code != 200 :
8588 raise OpalDSError (ValueError (f"Failed to check R session status: { response .code } " ))
8689 session = response .from_json ()
87- events = session .get ("events" , [])
88- if events :
89- return events [- 1 ]
90+ return session .get ("state" , "" ).lower () == "terminated"
91+
92+ def get_events (self ) -> list :
93+ if self .id is None :
94+ raise OpalDSError (ValueError ("R session not started" ))
95+ response = self ._get (UriBuilder (["datashield" , "session" , self .id ]).build ()).send ()
96+ if response .code != 200 :
97+ raise OpalDSError (ValueError (f"Failed to retrieve R session events: { response .code } " ))
98+ session = response .from_json ()
99+ events = [evt .split (";" ) for evt in session .get ("events" , [])]
100+ return events
101+
102+ def get_last_message (self ) -> str :
103+ events = self .get_events ()
104+ if events and len (events ) > 0 :
105+ last_event = events [- 1 ]
106+ return last_event [2 ] if len (last_event ) > 2 else "No message"
90107 return "No recent events"
91108
92109 def close (self ) -> None :
0 commit comments