feat: add task deletion endpoint
This commit is contained in:
@@ -1,5 +1,7 @@
|
|||||||
import os
|
import os
|
||||||
import glob
|
import glob
|
||||||
|
import shutil
|
||||||
|
|
||||||
from fastapi import Request, Depends, Path, BackgroundTasks, UploadFile
|
from fastapi import Request, Depends, Path, BackgroundTasks, UploadFile
|
||||||
from fastapi.params import File
|
from fastapi.params import File
|
||||||
from loguru import logger
|
from loguru import logger
|
||||||
@@ -9,7 +11,7 @@ from app.controllers import base
|
|||||||
from app.controllers.v1.base import new_router
|
from app.controllers.v1.base import new_router
|
||||||
from app.models.exception import HttpException
|
from app.models.exception import HttpException
|
||||||
from app.models.schema import TaskVideoRequest, TaskQueryResponse, TaskResponse, TaskQueryRequest, \
|
from app.models.schema import TaskVideoRequest, TaskQueryResponse, TaskResponse, TaskQueryRequest, \
|
||||||
BgmUploadResponse, BgmRetrieveResponse
|
BgmUploadResponse, BgmRetrieveResponse, TaskDeletionResponse
|
||||||
from app.services import task as tm
|
from app.services import task as tm
|
||||||
from app.services import state as sm
|
from app.services import state as sm
|
||||||
from app.utils import utils
|
from app.utils import utils
|
||||||
@@ -75,6 +77,23 @@ def get_task(request: Request, task_id: str = Path(..., description="Task ID"),
|
|||||||
raise HttpException(task_id=task_id, status_code=404, message=f"{request_id}: task not found")
|
raise HttpException(task_id=task_id, status_code=404, message=f"{request_id}: task not found")
|
||||||
|
|
||||||
|
|
||||||
|
@router.delete("/tasks/{task_id}", response_model=TaskDeletionResponse, summary="Delete a generated short video task")
|
||||||
|
def create_video(request: Request, task_id: str = Path(..., description="Task ID")):
|
||||||
|
request_id = base.get_task_id(request)
|
||||||
|
task = sm.state.get_task(task_id)
|
||||||
|
if task:
|
||||||
|
tasks_dir = utils.task_dir()
|
||||||
|
current_task_dir = os.path.join(tasks_dir, task_id)
|
||||||
|
if os.path.exists(current_task_dir):
|
||||||
|
shutil.rmtree(current_task_dir)
|
||||||
|
|
||||||
|
sm.state.delete_task(task_id)
|
||||||
|
logger.success(f"video deleted: {utils.to_json(task)}")
|
||||||
|
return utils.get_response(200, task)
|
||||||
|
|
||||||
|
raise HttpException(task_id=task_id, status_code=404, message=f"{request_id}: task not found")
|
||||||
|
|
||||||
|
|
||||||
@router.get("/musics", response_model=BgmRetrieveResponse, summary="Retrieve local BGM files")
|
@router.get("/musics", response_model=BgmRetrieveResponse, summary="Retrieve local BGM files")
|
||||||
def get_bgm_list(request: Request):
|
def get_bgm_list(request: Request):
|
||||||
suffix = "*.mp3"
|
suffix = "*.mp3"
|
||||||
|
|||||||
@@ -206,6 +206,26 @@ class TaskQueryResponse(BaseResponse):
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class TaskDeletionResponse(BaseResponse):
|
||||||
|
class Config:
|
||||||
|
json_schema_extra = {
|
||||||
|
"example": {
|
||||||
|
"status": 200,
|
||||||
|
"message": "success",
|
||||||
|
"data": {
|
||||||
|
"state": 1,
|
||||||
|
"progress": 100,
|
||||||
|
"videos": [
|
||||||
|
"http://127.0.0.1:8080/tasks/6c85c8cc-a77a-42b9-bc30-947815aa0558/final-1.mp4"
|
||||||
|
],
|
||||||
|
"combined_videos": [
|
||||||
|
"http://127.0.0.1:8080/tasks/6c85c8cc-a77a-42b9-bc30-947815aa0558/combined-1.mp4"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
class VideoScriptResponse(BaseResponse):
|
class VideoScriptResponse(BaseResponse):
|
||||||
class Config:
|
class Config:
|
||||||
json_schema_extra = {
|
json_schema_extra = {
|
||||||
|
|||||||
@@ -38,6 +38,10 @@ class MemoryState(BaseState):
|
|||||||
def get_task(self, task_id: str):
|
def get_task(self, task_id: str):
|
||||||
return self._tasks.get(task_id, None)
|
return self._tasks.get(task_id, None)
|
||||||
|
|
||||||
|
def delete_task(self, task_id: str):
|
||||||
|
if task_id in self._tasks:
|
||||||
|
del self._tasks[task_id]
|
||||||
|
|
||||||
|
|
||||||
# Redis state management
|
# Redis state management
|
||||||
class RedisState(BaseState):
|
class RedisState(BaseState):
|
||||||
@@ -67,6 +71,9 @@ class RedisState(BaseState):
|
|||||||
task = {key.decode('utf-8'): self._convert_to_original_type(value) for key, value in task_data.items()}
|
task = {key.decode('utf-8'): self._convert_to_original_type(value) for key, value in task_data.items()}
|
||||||
return task
|
return task
|
||||||
|
|
||||||
|
def delete_task(self, task_id: str):
|
||||||
|
self._redis.delete(task_id)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _convert_to_original_type(value):
|
def _convert_to_original_type(value):
|
||||||
"""
|
"""
|
||||||
|
|||||||
Reference in New Issue
Block a user