@@ -32,29 +32,27 @@ def attach_routes(self) -> APIRouter:
3232 @staticmethod
3333 def get_recordings () -> dict [str , list [Recording ]]:
3434 """Get all recordings."""
35- session = crud .get_new_session ()
35+ session = crud .get_new_session (read_only = True )
3636 recordings = crud .get_all_recordings (session )
3737 return {"recordings" : recordings }
3838
3939 @staticmethod
4040 def get_scrubbed_recordings () -> dict [str , list [Recording ]]:
4141 """Get all scrubbed recordings."""
42- session = crud .get_new_session ()
42+ session = crud .get_new_session (read_only = True )
4343 recordings = crud .get_all_scrubbed_recordings (session )
4444 return {"recordings" : recordings }
4545
4646 @staticmethod
47- async def start_recording () -> dict [str , str ]:
47+ def start_recording () -> dict [str , str | int ]:
4848 """Start a recording session."""
49- await crud .acquire_db_lock ()
5049 cards .quick_record ()
51- return {"message" : "Recording started" }
50+ return {"message" : "Recording started" , "status" : 200 }
5251
5352 @staticmethod
5453 def stop_recording () -> dict [str , str ]:
5554 """Stop a recording session."""
5655 cards .stop_record ()
57- crud .release_db_lock ()
5856 return {"message" : "Recording stopped" }
5957
6058 @staticmethod
@@ -69,48 +67,45 @@ def recording_detail_route(self) -> None:
6967 async def get_recording_detail (websocket : WebSocket , recording_id : int ) -> None :
7068 """Get a specific recording and its action events."""
7169 await websocket .accept ()
72- session = crud .get_new_session ()
73- with session :
74- recording = crud .get_recording_by_id (recording_id , session )
75-
76- await websocket .send_json (
77- {"type" : "recording" , "value" : recording .asdict ()}
78- )
79-
80- action_events = get_events (recording , session = session )
81-
82- await websocket .send_json (
83- {"type" : "num_events" , "value" : len (action_events )}
84- )
85-
86- def convert_to_str (event_dict : dict ) -> dict :
87- """Convert the keys to strings."""
88- if "key" in event_dict :
89- event_dict ["key" ] = str (event_dict ["key" ])
90- if "canonical_key" in event_dict :
91- event_dict ["canonical_key" ] = str (event_dict ["canonical_key" ])
92- if "reducer_names" in event_dict :
93- event_dict ["reducer_names" ] = list (event_dict ["reducer_names" ])
94- if "children" in event_dict :
95- for child_event in event_dict ["children" ]:
96- convert_to_str (child_event )
97-
98- for action_event in action_events :
99- event_dict = row2dict (action_event )
100- try :
101- image = display_event (action_event )
102- width , height = image .size
103- image = image2utf8 (image )
104- except Exception :
105- logger .info ("Failed to display event" )
106- image = None
107- width , height = 0 , 0
108- event_dict ["screenshot" ] = image
109- event_dict ["dimensions" ] = {"width" : width , "height" : height }
110-
111- convert_to_str (event_dict )
112- await websocket .send_json (
113- {"type" : "action_event" , "value" : event_dict }
114- )
115-
116- await websocket .close ()
70+ session = crud .get_new_session (read_only = True )
71+ recording = crud .get_recording_by_id (session , recording_id )
72+
73+ await websocket .send_json (
74+ {"type" : "recording" , "value" : recording .asdict ()}
75+ )
76+
77+ action_events = get_events (session , recording )
78+
79+ await websocket .send_json (
80+ {"type" : "num_events" , "value" : len (action_events )}
81+ )
82+
83+ def convert_to_str (event_dict : dict ) -> dict :
84+ """Convert the keys to strings."""
85+ if "key" in event_dict :
86+ event_dict ["key" ] = str (event_dict ["key" ])
87+ if "canonical_key" in event_dict :
88+ event_dict ["canonical_key" ] = str (event_dict ["canonical_key" ])
89+ if "reducer_names" in event_dict :
90+ event_dict ["reducer_names" ] = list (event_dict ["reducer_names" ])
91+ if "children" in event_dict :
92+ for child_event in event_dict ["children" ]:
93+ convert_to_str (child_event )
94+
95+ for action_event in action_events :
96+ event_dict = row2dict (action_event )
97+ try :
98+ image = display_event (action_event )
99+ width , height = image .size
100+ image = image2utf8 (image )
101+ except Exception :
102+ logger .info ("Failed to display event" )
103+ image = None
104+ width , height = 0 , 0
105+ event_dict ["screenshot" ] = image
106+ event_dict ["dimensions" ] = {"width" : width , "height" : height }
107+
108+ convert_to_str (event_dict )
109+ await websocket .send_json ({"type" : "action_event" , "value" : event_dict })
110+
111+ await websocket .close ()
0 commit comments