|
47 | 47 | AppProcessServerResponse, |
48 | 48 | AutogenRequestBody, |
49 | 49 | ComponentUpdateRequestPayload, |
| 50 | + DeleteDataRequestBody, |
50 | 51 | EventResponsePayload, |
51 | 52 | HashRequestPayload, |
52 | 53 | HashRequestResponsePayload, |
|
55 | 56 | InitResponseBodyRun, |
56 | 57 | InitSessionRequestPayload, |
57 | 58 | InitSessionResponsePayload, |
| 59 | + RetrieveDataRequestBody, |
| 60 | + RetrieveDataResponseBody, |
58 | 61 | ServeMode, |
59 | 62 | StateEnquiryResponsePayload, |
60 | 63 | WriterEvent, |
@@ -290,6 +293,38 @@ async def autogen(requestBody: AutogenRequestBody, request: Request): |
290 | 293 | agent_token_header |
291 | 294 | ) |
292 | 295 |
|
| 296 | + @app.post("/api/data/retrieve") |
| 297 | + async def retrieve_data(requestBody: RetrieveDataRequestBody) -> RetrieveDataResponseBody: |
| 298 | + from writer.keyvalue_storage import writer_kv_storage |
| 299 | + |
| 300 | + all_keys = writer_kv_storage.get_data_keys() |
| 301 | + |
| 302 | + keys_to_fetch = [] |
| 303 | + for key in all_keys: |
| 304 | + if key in requestBody.skip_keys: |
| 305 | + continue |
| 306 | + if requestBody.key_contains and requestBody.key_contains not in key: |
| 307 | + continue |
| 308 | + keys_to_fetch.append(key) |
| 309 | + |
| 310 | + async def fetch_value(key: str): |
| 311 | + return key, await asyncio.to_thread(writer_kv_storage.get, key, "data") |
| 312 | + |
| 313 | + kv_pairs = await asyncio.gather(*(fetch_value(key) for key in keys_to_fetch)) |
| 314 | + |
| 315 | + return RetrieveDataResponseBody(result={k: v["data"] for k, v in kv_pairs}) |
| 316 | + |
| 317 | + @app.post("/api/data/delete") |
| 318 | + async def delete_data(requestBody: DeleteDataRequestBody) -> None: |
| 319 | + from writer.keyvalue_storage import writer_kv_storage |
| 320 | + |
| 321 | + async def delete_key(key: str): |
| 322 | + return key, await asyncio.to_thread(writer_kv_storage.delete, key) |
| 323 | + |
| 324 | + await asyncio.gather(*(delete_key(key) for key in requestBody.keys)) |
| 325 | + |
| 326 | + return None |
| 327 | + |
293 | 328 | @app.post("/api/init") |
294 | 329 | async def init( |
295 | 330 | initBody: InitRequestBody, request: Request, response: Response |
|
0 commit comments