Skip to content

Commit d57434e

Browse files
author
kevin.zhang
committed
feat: add task deletion endpoint
1 parent a880b2b commit d57434e

File tree

3 files changed

+47
-1
lines changed

3 files changed

+47
-1
lines changed

app/controllers/v1/video.py

+20-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import os
22
import glob
3+
import shutil
4+
35
from fastapi import Request, Depends, Path, BackgroundTasks, UploadFile
46
from fastapi.params import File
57
from loguru import logger
@@ -9,7 +11,7 @@
911
from app.controllers.v1.base import new_router
1012
from app.models.exception import HttpException
1113
from app.models.schema import TaskVideoRequest, TaskQueryResponse, TaskResponse, TaskQueryRequest, \
12-
BgmUploadResponse, BgmRetrieveResponse
14+
BgmUploadResponse, BgmRetrieveResponse, TaskDeletionResponse
1315
from app.services import task as tm
1416
from app.services import state as sm
1517
from app.utils import utils
@@ -75,6 +77,23 @@ def file_to_uri(file):
7577
raise HttpException(task_id=task_id, status_code=404, message=f"{request_id}: task not found")
7678

7779

80+
@router.delete("/tasks/{task_id}", response_model=TaskDeletionResponse, summary="Delete a generated short video task")
81+
def create_video(request: Request, task_id: str = Path(..., description="Task ID")):
82+
request_id = base.get_task_id(request)
83+
task = sm.state.get_task(task_id)
84+
if task:
85+
tasks_dir = utils.task_dir()
86+
current_task_dir = os.path.join(tasks_dir, task_id)
87+
if os.path.exists(current_task_dir):
88+
shutil.rmtree(current_task_dir)
89+
90+
sm.state.delete_task(task_id)
91+
logger.success(f"video deleted: {utils.to_json(task)}")
92+
return utils.get_response(200, task)
93+
94+
raise HttpException(task_id=task_id, status_code=404, message=f"{request_id}: task not found")
95+
96+
7897
@router.get("/musics", response_model=BgmRetrieveResponse, summary="Retrieve local BGM files")
7998
def get_bgm_list(request: Request):
8099
suffix = "*.mp3"

app/models/schema.py

+20
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,26 @@ class Config:
206206
}
207207

208208

209+
class TaskDeletionResponse(BaseResponse):
210+
class Config:
211+
json_schema_extra = {
212+
"example": {
213+
"status": 200,
214+
"message": "success",
215+
"data": {
216+
"state": 1,
217+
"progress": 100,
218+
"videos": [
219+
"http://127.0.0.1:8080/tasks/6c85c8cc-a77a-42b9-bc30-947815aa0558/final-1.mp4"
220+
],
221+
"combined_videos": [
222+
"http://127.0.0.1:8080/tasks/6c85c8cc-a77a-42b9-bc30-947815aa0558/combined-1.mp4"
223+
]
224+
}
225+
},
226+
}
227+
228+
209229
class VideoScriptResponse(BaseResponse):
210230
class Config:
211231
json_schema_extra = {

app/services/state.py

+7
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,10 @@ def update_task(self, task_id: str, state: int = const.TASK_STATE_PROCESSING, pr
3838
def get_task(self, task_id: str):
3939
return self._tasks.get(task_id, None)
4040

41+
def delete_task(self, task_id: str):
42+
if task_id in self._tasks:
43+
del self._tasks[task_id]
44+
4145

4246
# Redis state management
4347
class RedisState(BaseState):
@@ -67,6 +71,9 @@ def get_task(self, task_id: str):
6771
task = {key.decode('utf-8'): self._convert_to_original_type(value) for key, value in task_data.items()}
6872
return task
6973

74+
def delete_task(self, task_id: str):
75+
self._redis.delete(task_id)
76+
7077
@staticmethod
7178
def _convert_to_original_type(value):
7279
"""

0 commit comments

Comments
 (0)