Files
solar-pv-dashboard/backend/app/routes/historical.py
Mateusz Gruszczyński 84fe898a74 fix ux
2026-03-24 15:49:06 +01:00

73 lines
2.1 KiB
Python

from __future__ import annotations
from datetime import date
from flask import Blueprint, jsonify, request
from app.services.auth import get_auth_service
from app.services.historical_sync import get_historical_sync_service
from app.utils.serialization import to_plain
historical_blueprint = Blueprint("historical", __name__)
service = get_historical_sync_service()
auth_service = get_auth_service()
@historical_blueprint.get("/historical/status")
def historical_status():
try:
auth_service.require_admin()
except PermissionError as exc:
return jsonify({"detail": str(exc)}), 403
return jsonify(to_plain(service.status()))
@historical_blueprint.post("/historical/start")
def historical_start():
try:
auth_service.require_admin()
except PermissionError as exc:
return jsonify({"detail": str(exc)}), 403
payload = request.get_json(silent=True) or {}
try:
status = service.start(
start_date=_parse_date(payload.get("start_date")),
end_date=_parse_date(payload.get("end_date")),
chunk_days=payload.get("chunk_days"),
force=bool(payload.get("force", False)),
)
return jsonify(to_plain(status))
except ValueError as exc:
return jsonify({"detail": str(exc)}), 400
except RuntimeError as exc:
return jsonify({"detail": str(exc)}), 400
@historical_blueprint.post("/historical/sync-now")
def historical_sync_now():
try:
auth_service.require_admin()
except PermissionError as exc:
return jsonify({"detail": str(exc)}), 403
try:
status = service.start(auto=True)
return jsonify(to_plain(status))
except RuntimeError as exc:
return jsonify({"detail": str(exc)}), 400
@historical_blueprint.post("/historical/cancel")
def historical_cancel():
try:
auth_service.require_admin()
except PermissionError as exc:
return jsonify({"detail": str(exc)}), 403
return jsonify(to_plain(service.cancel()))
def _parse_date(value: str | None) -> date | None:
if not value:
return None
return date.fromisoformat(value)