Coverage for src/local_deep_research/research_scheduler/routes.py: 90%
34 statements
« prev ^ index » next coverage.py v7.14.1, created at 2026-06-03 23:15 +0000
« prev ^ index » next coverage.py v7.14.1, created at 2026-06-03 23:15 +0000
1"""
2API routes for document scheduler management.
3"""
5from flask import Blueprint, jsonify, session
6from loguru import logger
8from ..scheduler.background import get_background_job_scheduler
9from ..web.auth.decorators import login_required
11# Create blueprint
12scheduler_bp = Blueprint("document_scheduler", __name__)
14# NOTE: Routes use session["username"] (not .get()) intentionally.
15# @login_required guarantees the key exists; direct access fails fast
16# if the decorator is ever removed.
17# Helper functions (not decorated) keep .get() for safety.
20def get_current_username():
21 """Get current username from session."""
22 return session.get("username")
25@scheduler_bp.route("/api/scheduler/status", methods=["GET"])
26@login_required
27def get_scheduler_status():
28 """Get the current status of the document scheduler for the current user."""
29 try:
30 username = get_current_username()
31 if not username: 31 ↛ 32line 31 didn't jump to line 32 because the condition on line 31 was never true
32 return jsonify({"error": "User not authenticated"}), 401
34 scheduler = get_background_job_scheduler()
35 status = scheduler.get_document_scheduler_status(username)
36 return jsonify(status)
37 except Exception:
38 logger.exception("Error getting scheduler status")
39 return jsonify({"error": "Failed to get scheduler status"}), 500
42@scheduler_bp.route("/api/scheduler/run-now", methods=["POST"])
43@login_required
44def trigger_manual_run():
45 """Trigger a manual processing run of the document scheduler for the current user."""
46 try:
47 username = get_current_username()
48 if not username: 48 ↛ 49line 48 didn't jump to line 49 because the condition on line 48 was never true
49 return jsonify({"error": "User not authenticated"}), 401
51 scheduler = get_background_job_scheduler()
52 if scheduler.trigger_document_processing(username):
53 return jsonify(
54 {"message": "Manual document processing triggered successfully"}
55 )
56 return (
57 jsonify(
58 {
59 "error": "Failed to trigger document processing - user may not be active or processing disabled"
60 }
61 ),
62 400,
63 )
64 except Exception:
65 logger.exception("Error triggering manual run")
66 return jsonify({"error": "Failed to trigger manual run"}), 500