Clean Python Flask replacement for odc-api (434k lines Node.js → ~350 lines Python)
- GET /api/1/landmarks/last/{N} - last N detections from SQLite
- POST /api/1/landmarks - ingest detections + forward to AdaMaps
- GET /api/1/gnssConcise/latestValid - GPS fix from Redis
- GET /api/1/status - device status
- GET /api/1/deviceinfo - device identity
- GET /api/1/recording/frames/latest - latest frame path
No /api/1/cmd - that's the CVE, it's gone.
Includes:
- SQLite for local storage + offline queue
- Background thread for AdaMaps retry
- systemd service unit
- install.sh for device deployment
26 lines
739 B
Python
26 lines
739 B
Python
"""Landmark detection endpoints."""
|
|
from flask import Blueprint, jsonify, request
|
|
from .. import db, forwarder
|
|
|
|
bp = Blueprint("landmarks", __name__, url_prefix="/api/1/landmarks")
|
|
|
|
|
|
@bp.route("/last/<int:n>", methods=["GET"])
|
|
def get_last(n):
|
|
"""Get last N detections."""
|
|
n = min(n, 1000) # Cap at 1000
|
|
landmarks = db.get_last_landmarks(n)
|
|
return jsonify(landmarks)
|
|
|
|
|
|
@bp.route("", methods=["POST"])
|
|
def ingest():
|
|
"""Ingest a new detection from camera pipeline."""
|
|
data = request.get_json()
|
|
if not data or "class_label" not in data:
|
|
return jsonify({"error": "Missing class_label"}), 400
|
|
|
|
db.insert_landmark(data)
|
|
forwarder.forward_detection(data)
|
|
|
|
return jsonify({"status": "ok"})
|