Files

53 lines
1.6 KiB
Python

from __future__ import annotations
from typing import Optional
from fastapi import APIRouter, Depends, HTTPException
from pydantic import BaseModel, Field
from ..models import AuthUserORM
from ..services.job_queue_service import job_queue_service
from ..services.task_service import task_service
from ..services.unpack_service import build_unpack_run_config, get_unpack_config
from .dependencies import _require_admin
router = APIRouter()
class UnpackRunRequest(BaseModel):
max_files_per_run: Optional[int] = Field(default=None, ge=0)
max_runtime_minutes: Optional[int] = Field(default=None, ge=0)
@router.get("/unpack/config")
async def get_unpack_config_endpoint():
return get_unpack_config()
@router.post("/unpack/run", status_code=202)
async def run_unpack_endpoint(
request: Optional[UnpackRunRequest] = None,
admin_user: AuthUserORM = Depends(_require_admin),
):
del admin_user
overrides = request.model_dump(exclude_none=True) if request else None
config = build_unpack_run_config(overrides)
if not config.get("source_dirs"):
raise HTTPException(status_code=400, detail="UNPACK_SOURCE_DIRS is not configured.")
try:
task_id = await task_service.create_task(
"UNPACK_ARCHIVES",
"Archive unpack",
params=config,
)
await job_queue_service.create_job(
"UNPACK_ARCHIVES",
payload=config,
task_id=task_id,
)
return {"message": "Unpack task queued", "task_id": task_id}
except ValueError as exc:
raise HTTPException(status_code=409, detail=str(exc)) from exc