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

1""" 

2API routes for document scheduler management. 

3""" 

4 

5from fastapi import APIRouter, Depends, Request 

6from fastapi.responses import JSONResponse 

7from ..dependencies.auth import require_auth 

8 

9from loguru import logger 

10 

11from ...scheduler.background import get_background_job_scheduler 

12from typing import Annotated 

13 

14# Create the router 

15router = APIRouter(tags=["document_scheduler"]) 

16 

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. 

21 

22 

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 ) 

36 

37 

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 )