mirror of
https://github.com/harry0703/MoneyPrinterTurbo.git
synced 2026-02-28 20:07:21 +08:00
58 lines
2.1 KiB
Python
58 lines
2.1 KiB
Python
from fastapi import Request, Depends, Path, BackgroundTasks
|
|
from loguru import logger
|
|
|
|
from app.config import config
|
|
from app.controllers import base
|
|
from app.controllers.v1.base import new_router
|
|
from app.models.exception import HttpException
|
|
from app.models.schema import TaskVideoRequest, TaskQueryResponse, TaskResponse, TaskQueryRequest
|
|
from app.services import task as tm
|
|
from app.services import state as sm
|
|
from app.utils import utils
|
|
|
|
# 认证依赖项
|
|
# router = new_router(dependencies=[Depends(base.verify_token)])
|
|
router = new_router()
|
|
|
|
|
|
@router.post("/videos", response_model=TaskResponse, summary="Generate a short video")
|
|
def create_video(background_tasks: BackgroundTasks, request: Request, body: TaskVideoRequest):
|
|
task_id = utils.get_uuid()
|
|
request_id = base.get_task_id(request)
|
|
try:
|
|
task = {
|
|
"task_id": task_id,
|
|
"request_id": request_id,
|
|
"params": body.dict(),
|
|
}
|
|
sm.update_task(task_id)
|
|
background_tasks.add_task(tm.start, task_id=task_id, params=body)
|
|
logger.success(f"video created: {utils.to_json(task)}")
|
|
return utils.get_response(200, task)
|
|
except ValueError as e:
|
|
raise HttpException(task_id=task_id, status_code=400, message=f"{request_id}: {str(e)}")
|
|
|
|
|
|
@router.get("/tasks/{task_id}", response_model=TaskQueryResponse, summary="Query task status")
|
|
def get_task(request: Request, task_id: str = Path(..., description="Task ID"),
|
|
query: TaskQueryRequest = Depends()):
|
|
endpoint = config.app.get("endpoint", "")
|
|
if not endpoint:
|
|
endpoint = str(request.base_url)
|
|
endpoint = endpoint.rstrip("/")
|
|
|
|
request_id = base.get_task_id(request)
|
|
task = sm.get_task(task_id)
|
|
if task:
|
|
if "videos" in task:
|
|
videos = task["videos"]
|
|
task_dir = utils.task_dir()
|
|
urls = []
|
|
for v in videos:
|
|
uri_path = v.replace(task_dir, "tasks")
|
|
urls.append(f"{endpoint}/{uri_path}")
|
|
task["videos"] = urls
|
|
return utils.get_response(200, task)
|
|
|
|
raise HttpException(task_id=task_id, status_code=404, message=f"{request_id}: task not found")
|