query_generation.py 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. """Formal query-generation preview API routes."""
  2. from __future__ import annotations
  3. from typing import Any
  4. from fastapi import APIRouter, Depends, Query
  5. from acquisition.queries.builder import QueryBuildOptions, TREES, build_creation_query_batch
  6. from app.dependencies import _env_file, get_acquisition_repository
  7. from core.config import Settings
  8. router = APIRouter(prefix="/api/query-generation", tags=["query-generation"])
  9. def _summary(generated: dict[str, Any]) -> dict[str, Any]:
  10. families = generated.get("families") or []
  11. return {
  12. "family_count": len(families),
  13. "family_keys": [family.get("key") for family in families],
  14. "query_count": sum(len(family.get("items") or []) for family in families),
  15. "kept_count": sum(
  16. 1
  17. for family in families
  18. for item in family.get("items") or []
  19. if item.get("keep", True)
  20. ),
  21. }
  22. @router.get("/preview")
  23. def query_generation_preview(
  24. per: int = Query(default=30, ge=1, le=100),
  25. dry: bool = Query(default=True),
  26. ) -> dict[str, Any]:
  27. """Preview the currently active formal query families without writing DB rows."""
  28. settings = Settings.from_env(_env_file())
  29. generated = build_creation_query_batch(
  30. settings,
  31. tree_path=TREES,
  32. options=QueryBuildOptions(
  33. per=per,
  34. dry=dry,
  35. active_family_keys=("f1", "f2"),
  36. ),
  37. )
  38. generated["summary"] = _summary(generated)
  39. return generated
  40. @router.get("/latest-singleton")
  41. def latest_singleton_overview(repo: Any = Depends(get_acquisition_repository)) -> dict[str, Any]:
  42. """Return links from the query preview board to the latest real singleton run."""
  43. getter = getattr(repo, "get_latest_singleton_overview", None)
  44. if getter is None:
  45. return {"batch": None, "run": None, "queries": [], "decoded_items": []}
  46. return getter()