Stazioni: sorgenti camera lette dall'acquisitore, link Acquisizione (#88)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Jbf7qKuxsnAVjxthRy7dnB
This commit is contained in:
@@ -1,4 +1,6 @@
|
||||
"""Admin blueprint - user management."""
|
||||
from urllib.parse import urlparse # #88: validazione url camera
|
||||
import requests as http_requests # #88: lettura sorgenti dall'acquisitore (come maker.py)
|
||||
from flask import Blueprint, flash, jsonify, redirect, render_template, request, session, url_for
|
||||
from flask_babel import gettext as _
|
||||
|
||||
@@ -170,6 +172,39 @@ def api_toggle_active(user_id: int):
|
||||
|
||||
# --- Stations ---
|
||||
|
||||
@admin_bp.route("/api/camera/sources", methods=["GET"])
|
||||
@login_required
|
||||
@admin_required
|
||||
def api_camera_sources():
|
||||
"""Proxy (#88): elenco sorgenti di un acquisitore, GET <url>/camera/sources."""
|
||||
url = (request.args.get("url") or "").strip()
|
||||
parsed = urlparse(url)
|
||||
if parsed.scheme not in ("http", "https") or not parsed.netloc:
|
||||
return jsonify({"error": True, "detail": _("Indirizzo della camera non valido")}), 400
|
||||
try:
|
||||
resp = http_requests.get(f"{url.rstrip('/')}/camera/sources", timeout=5)
|
||||
except http_requests.RequestException as exc:
|
||||
return jsonify({
|
||||
"error": True,
|
||||
"detail": _("Servizio camera non raggiungibile: %(detail)s", detail=str(exc)),
|
||||
}), 502
|
||||
invalid = (jsonify({"error": True, "detail": _("Risposta non valida dal servizio camera")}), 502)
|
||||
if resp.status_code != 200:
|
||||
return invalid
|
||||
try:
|
||||
sources = resp.json().get("sources")
|
||||
except (ValueError, AttributeError):
|
||||
return invalid
|
||||
if not isinstance(sources, list):
|
||||
return invalid
|
||||
# solo i tre campi che la UI usa, sempre stringhe
|
||||
clean = [
|
||||
{k: str(s.get(k, "")) for k in ("name", "label", "kind")}
|
||||
for s in sources if isinstance(s, dict)
|
||||
]
|
||||
return jsonify({"sources": clean}), 200
|
||||
|
||||
|
||||
@admin_bp.route("/api/stations", methods=["POST"])
|
||||
@login_required
|
||||
@admin_required
|
||||
|
||||
@@ -598,7 +598,7 @@ def api_station_camera_calibration(station_id: int):
|
||||
}), 409
|
||||
camera_url, camera_source = camera
|
||||
base = camera_url.rstrip("/")
|
||||
link = f"{base}/calibrazione" # pagina di calibrazione dell'acquisitore (C4)
|
||||
link = f"{base}/acquisizione" # pagina di acquisizione dell'acquisitore (#88; era /calibrazione, C4)
|
||||
try:
|
||||
resp = http_requests.get(
|
||||
f"{base}/camera/calibration",
|
||||
|
||||
Reference in New Issue
Block a user