Simple web backend added with upload/status/process/download API
This commit is contained in:
@@ -0,0 +1,64 @@
|
||||
"""In-memory task state management."""
|
||||
|
||||
from typing import Dict, Optional, List
|
||||
from datetime import datetime, timedelta
|
||||
import threading
|
||||
import time
|
||||
|
||||
from backend.config import settings
|
||||
from backend.models.response import TaskStatus, TrackInfo
|
||||
|
||||
|
||||
class TaskManager:
|
||||
def __init__(self):
|
||||
self._tasks: Dict[str, dict] = {}
|
||||
self._lock = threading.Lock()
|
||||
|
||||
def create_task(self, task_id: str, filename: str, file_size: int) -> None:
|
||||
with self._lock:
|
||||
self._tasks[task_id] = {
|
||||
"task_id": task_id,
|
||||
"filename": filename,
|
||||
"file_size": file_size,
|
||||
"status": TaskStatus.PENDING,
|
||||
"progress": 0,
|
||||
"message": "Upload complete",
|
||||
"error": None,
|
||||
"tracks": [],
|
||||
"created_at": datetime.now(),
|
||||
"updated_at": datetime.now()
|
||||
}
|
||||
|
||||
def has_task(self, task_id: str) -> bool:
|
||||
return task_id in self._tasks
|
||||
|
||||
def get_status(self, task_id: str) -> dict:
|
||||
with self._lock:
|
||||
return self._tasks.get(task_id, {}).copy()
|
||||
|
||||
def update_task(self, task_id: str, **kwargs) -> None:
|
||||
with self._lock:
|
||||
if task_id in self._tasks:
|
||||
self._tasks[task_id].update(kwargs)
|
||||
self._tasks[task_id]["updated_at"] = datetime.now()
|
||||
|
||||
def cleanup_old_tasks(self) -> None:
|
||||
now = datetime.now()
|
||||
timeout = timedelta(seconds=settings.cleanup_after_seconds)
|
||||
with self._lock:
|
||||
to_delete = []
|
||||
for task_id, data in self._tasks.items():
|
||||
if now - data["created_at"] > timeout:
|
||||
to_delete.append(task_id)
|
||||
for task_id in to_delete:
|
||||
self._delete_task_files(task_id)
|
||||
del self._tasks[task_id]
|
||||
|
||||
def _delete_task_files(self, task_id: str) -> None:
|
||||
import shutil
|
||||
task_dir = settings.temp_dir / task_id
|
||||
if task_dir.exists():
|
||||
shutil.rmtree(task_dir, ignore_errors=True)
|
||||
|
||||
|
||||
task_manager = TaskManager()
|
||||
Reference in New Issue
Block a user