支持fastapi服务
This commit is contained in:
93
api/routers/tasks.py
Normal file
93
api/routers/tasks.py
Normal file
@@ -0,0 +1,93 @@
|
||||
"""
|
||||
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))
|
||||
|
||||
Reference in New Issue
Block a user