Coverage for src/local_deep_research/web/routers/scheduler.py: 100%
25 statements
« prev ^ index » next coverage.py v7.16.0, created at 2026-09-06 15:42 +0000
« prev ^ index » next coverage.py v7.16.0, created at 2026-09-06 15:42 +0000
1"""
2API routes for document scheduler management.
3"""
5from fastapi import APIRouter, Depends, Request
6from fastapi.responses import JSONResponse
7from ..dependencies.auth import require_auth
9from loguru import logger
11from ...scheduler.background import get_background_job_scheduler
12from typing import Annotated
14# Create the router
15router = APIRouter(tags=["document_scheduler"])
17# NOTE: Routes use username (not .get()) intentionally.
18# Depends(require_auth) guarantees the key exists; direct access fails
19# fast if the dependency is ever removed.
20# Helper functions (not decorated) keep .get() for safety.
23@router.get("/api/scheduler/status")
24def get_scheduler_status(
25 request: Request, username: Annotated[str, Depends(require_auth)]
26):
27 """Get the current status of the document scheduler for the current user."""
28 try:
29 scheduler = get_background_job_scheduler()
30 return scheduler.get_document_scheduler_status(username)
31 except Exception:
32 logger.exception("Error getting scheduler status")
33 return JSONResponse(
34 {"error": "Failed to get scheduler status"}, status_code=500
35 )
38@router.post("/api/scheduler/run-now")
39def trigger_manual_run(
40 request: Request, username: Annotated[str, Depends(require_auth)]
41):
42 """Trigger a manual processing run of the document scheduler for the current user."""
43 try:
44 scheduler = get_background_job_scheduler()
45 if scheduler.trigger_document_processing(username):
46 return {
47 "message": "Manual document processing triggered successfully"
48 }
49 return JSONResponse(
50 {
51 "error": "Failed to trigger document processing - user may "
52 "not be active or processing disabled"
53 },
54 status_code=400,
55 )
56 except Exception:
57 logger.exception("Error triggering manual run")
58 return JSONResponse(
59 {"error": "Failed to trigger manual run"}, status_code=500
60 )