From c1eb61a9736d1e2c4047ceb7aa89d951cc1c7100 Mon Sep 17 00:00:00 2001 From: phact Date: Wed, 30 Jul 2025 15:56:36 -0400 Subject: [PATCH] tasks get their own module and list support --- src/api/upload.py | 10 ---------- src/main.py | 11 +++++++++-- src/services/task_service.py | 22 ++++++++++++++++++++++ 3 files changed, 31 insertions(+), 12 deletions(-) diff --git a/src/api/upload.py b/src/api/upload.py index f9f9224d..87c0d32a 100644 --- a/src/api/upload.py +++ b/src/api/upload.py @@ -66,13 +66,3 @@ async def upload_context(request: Request, document_service, chat_service, sessi return JSONResponse(response_data) -async def task_status(request: Request, task_service, session_manager): - """Get the status of an upload task""" - task_id = request.path_params.get("task_id") - user = request.state.user - - task_status_result = task_service.get_task_status(user.user_id, task_id) - if not task_status_result: - return JSONResponse({"error": "Task not found"}, status_code=404) - - return JSONResponse(task_status_result) \ No newline at end of file diff --git a/src/main.py b/src/main.py index 12a5005b..10a8059a 100644 --- a/src/main.py +++ b/src/main.py @@ -30,7 +30,7 @@ from session_manager import SessionManager from auth_middleware import require_auth, optional_auth # API endpoints -from api import upload, search, chat, auth, connectors +from api import upload, search, chat, auth, connectors, tasks print("CUDA available:", torch.cuda.is_available()) print("CUDA version PyTorch was built with:", torch.version.cuda) @@ -133,7 +133,14 @@ def create_app(): Route("/tasks/{task_id}", require_auth(services['session_manager'])( - partial(upload.task_status, + partial(tasks.task_status, + task_service=services['task_service'], + session_manager=services['session_manager']) + ), methods=["GET"]), + + Route("/tasks", + require_auth(services['session_manager'])( + partial(tasks.all_tasks, task_service=services['task_service'], session_manager=services['session_manager']) ), methods=["GET"]), diff --git a/src/services/task_service.py b/src/services/task_service.py index 2d66d3b2..715bb51d 100644 --- a/src/services/task_service.py +++ b/src/services/task_service.py @@ -168,6 +168,28 @@ class TaskService: "files": file_statuses } + def get_all_tasks(self, user_id: str) -> list: + """Get all tasks for a user""" + if user_id not in self.task_store: + return [] + + tasks = [] + for task_id, upload_task in self.task_store[user_id].items(): + tasks.append({ + "task_id": upload_task.task_id, + "status": upload_task.status.value, + "total_files": upload_task.total_files, + "processed_files": upload_task.processed_files, + "successful_files": upload_task.successful_files, + "failed_files": upload_task.failed_files, + "created_at": upload_task.created_at, + "updated_at": upload_task.updated_at + }) + + # Sort by creation time, most recent first + tasks.sort(key=lambda x: x["created_at"], reverse=True) + return tasks + def shutdown(self): """Cleanup process pool""" if hasattr(self, 'process_pool'):