feat: instrument model
This commit is contained in:
@@ -13,6 +13,16 @@ class OverrideBody(BaseModel):
|
||||
note: Optional[str] = ""
|
||||
|
||||
|
||||
class BulkOverrideItem(BaseModel):
|
||||
node_id: str
|
||||
value: float
|
||||
note: Optional[str] = ""
|
||||
|
||||
|
||||
class BulkOverrideBody(BaseModel):
|
||||
overrides: List[BulkOverrideItem]
|
||||
|
||||
|
||||
@router.get("", response_model=List[Dict[str, Any]])
|
||||
def list_instrument_models():
|
||||
from services.database import get_conn
|
||||
@@ -44,6 +54,67 @@ def list_instrument_models():
|
||||
conn.close()
|
||||
|
||||
|
||||
@router.get("/{instrument}/gauge-suggestions")
|
||||
def get_gauge_suggestions(instrument: str) -> Dict[str, Any]:
|
||||
"""Suggestions de valeurs depuis les derniers gauges de marché (macro_regime_history)."""
|
||||
from services.database import get_conn
|
||||
from services.gauge_sync import suggest_from_gauges, get_latest_gauges
|
||||
from services.instrument_models import INSTRUMENT_MODELS
|
||||
conn = get_conn()
|
||||
try:
|
||||
inst = instrument.upper()
|
||||
if inst not in INSTRUMENT_MODELS:
|
||||
raise HTTPException(status_code=404, detail=f"Instrument {inst} non supporté")
|
||||
gauges, snap_date = get_latest_gauges(conn)
|
||||
if not gauges:
|
||||
raise HTTPException(status_code=404, detail="Aucun snapshot de gauges disponible")
|
||||
suggestions = suggest_from_gauges(inst, gauges)
|
||||
# Enrich with node label/unit from graph if missing
|
||||
return {
|
||||
"instrument": inst,
|
||||
"gauge_date": snap_date,
|
||||
"n_suggestions": len(suggestions),
|
||||
"suggestions": suggestions,
|
||||
"gauges_available": list(gauges.keys()),
|
||||
}
|
||||
finally:
|
||||
conn.close()
|
||||
|
||||
|
||||
@router.post("/{instrument}/apply-suggestions")
|
||||
def apply_gauge_suggestions(
|
||||
instrument: str,
|
||||
body: BulkOverrideBody,
|
||||
) -> Dict[str, Any]:
|
||||
"""Applique une liste d'overrides en bulk (depuis gauge sync ou saisie rapide)."""
|
||||
from services.database import get_conn
|
||||
from services.instrument_models import set_node_override
|
||||
conn = get_conn()
|
||||
try:
|
||||
inst = instrument.upper()
|
||||
saved = []
|
||||
for item in body.overrides:
|
||||
set_node_override(conn, inst, item.node_id, item.value, item.note or "")
|
||||
saved.append(item.node_id)
|
||||
return {"ok": True, "instrument": inst, "saved": saved, "count": len(saved)}
|
||||
finally:
|
||||
conn.close()
|
||||
|
||||
|
||||
@router.delete("/{instrument}/overrides")
|
||||
def clear_all_overrides(instrument: str) -> Dict[str, Any]:
|
||||
"""Supprime TOUTES les overrides d'un instrument (reset à zéro)."""
|
||||
from services.database import get_conn
|
||||
conn = get_conn()
|
||||
try:
|
||||
inst = instrument.upper()
|
||||
conn.execute("DELETE FROM instrument_node_overrides WHERE instrument=?", (inst,))
|
||||
conn.commit()
|
||||
return {"ok": True, "instrument": inst}
|
||||
finally:
|
||||
conn.close()
|
||||
|
||||
|
||||
@router.get("/{instrument}/regime")
|
||||
def get_instrument_regime(
|
||||
instrument: str,
|
||||
|
||||
Reference in New Issue
Block a user