stock-scraper / api /retrain.py
sbasu2512's picture
intertwine the services
57384dd
Raw
History Blame Contribute Delete
1.54 kB
from __future__ import annotations
import os
from app.config import settings
from fastapi import APIRouter, Depends, HTTPException
from api.auth import require_pipeline_guid
from database.connection import connect
from database.retrain_repository import (
acknowledge_flag, get_database_url, get_pending_flag, resolve_flag
)
router = APIRouter(prefix="/retrain", tags=["retraining"])
def _db():
value = settings.DATABASE_URL
if not value:
raise HTTPException(status_code=500, detail="DATABASE_URL is not configured")
return value
@router.get("/status")
def retrain_status():
with connect(_db()) as conn:
pending = get_pending_flag(conn)
return {"retrain_required": pending is not None, "flag": pending}
@router.post("/flags/{flag_id}/acknowledge", dependencies=[Depends(require_pipeline_guid)])
def acknowledge(flag_id: int, notes: str | None = None):
with connect(_db()) as conn:
updated = acknowledge_flag(conn, flag_id, notes)
if updated is None:
raise HTTPException(status_code=404, detail="Pending retrain flag not found")
return {"status": "acknowledged", "flag_id": updated}
@router.post("/flags/{flag_id}/resolve", dependencies=[Depends(require_pipeline_guid)])
def resolve(flag_id: int, notes: str | None = None):
with connect(_db()) as conn:
updated = resolve_flag(conn, flag_id, notes)
if updated is None:
raise HTTPException(status_code=404, detail="Open retrain flag not found")
return {"status": "resolved", "flag_id": updated}