| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- # Copyright (C) 2025 AIDC-AI
- #
- # Licensed under the Apache License, Version 2.0 (the "License");
- # you may not use this file except in compliance with the License.
- # You may obtain a copy of the License at
- # http://www.apache.org/licenses/LICENSE-2.0
- # Unless required by applicable law or agreed to in writing, software
- # distributed under the License is distributed on an "AS IS" BASIS,
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- # See the License for the specific language governing permissions and
- # limitations under the License.
- """
- Task management endpoints
- Endpoints for managing async tasks (checking status, canceling, etc.)
- """
- from typing import List, Optional
- from fastapi import APIRouter, HTTPException, Query
- from loguru import logger
- from api.tasks import task_manager, Task, TaskStatus
- router = APIRouter(prefix="/tasks", tags=["Tasks"])
- @router.get("", response_model=List[Task])
- async def list_tasks(
- status: Optional[TaskStatus] = Query(None, description="Filter by status"),
- limit: int = Query(100, ge=1, le=1000, description="Maximum number of tasks")
- ):
- """
- List tasks
-
- Retrieve list of tasks with optional filtering.
-
- - **status**: Optional filter by status (pending/running/completed/failed/cancelled)
- - **limit**: Maximum number of tasks to return (default 100)
-
- Returns list of tasks sorted by creation time (newest first).
- """
- try:
- tasks = task_manager.list_tasks(status=status, limit=limit)
- return tasks
-
- except Exception as e:
- logger.error(f"List tasks error: {e}")
- raise HTTPException(status_code=500, detail=str(e))
- @router.get("/{task_id}", response_model=Task)
- async def get_task(task_id: str):
- """
- Get task details
-
- Retrieve detailed information about a specific task.
-
- - **task_id**: Task ID
-
- Returns task details including status, progress, and result (if completed).
- """
- try:
- task = task_manager.get_task(task_id)
-
- if not task:
- raise HTTPException(status_code=404, detail=f"Task {task_id} not found")
-
- return task
-
- except HTTPException:
- raise
- except Exception as e:
- logger.error(f"Get task error: {e}")
- raise HTTPException(status_code=500, detail=str(e))
- @router.delete("/{task_id}")
- async def cancel_task(task_id: str):
- """
- Cancel task
-
- Cancel a running or pending task.
-
- - **task_id**: Task ID
-
- Returns success status.
- """
- try:
- success = task_manager.cancel_task(task_id)
-
- if not success:
- raise HTTPException(status_code=404, detail=f"Task {task_id} not found")
-
- return {
- "success": True,
- "message": f"Task {task_id} cancelled successfully"
- }
-
- except HTTPException:
- raise
- except Exception as e:
- logger.error(f"Cancel task error: {e}")
- raise HTTPException(status_code=500, detail=str(e))
|