| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- """Formal query-generation preview API routes."""
- from __future__ import annotations
- from typing import Any
- from fastapi import APIRouter, Depends, Query
- from acquisition.queries.builder import QueryBuildOptions, TREES, build_creation_query_batch
- from app.dependencies import _env_file, get_acquisition_repository
- from core.config import Settings
- router = APIRouter(prefix="/api/query-generation", tags=["query-generation"])
- def _summary(generated: dict[str, Any]) -> dict[str, Any]:
- families = generated.get("families") or []
- return {
- "family_count": len(families),
- "family_keys": [family.get("key") for family in families],
- "query_count": sum(len(family.get("items") or []) for family in families),
- "kept_count": sum(
- 1
- for family in families
- for item in family.get("items") or []
- if item.get("keep", True)
- ),
- }
- @router.get("/preview")
- def query_generation_preview(
- per: int = Query(default=30, ge=1, le=100),
- dry: bool = Query(default=True),
- ) -> dict[str, Any]:
- """Preview the currently active formal query families without writing DB rows."""
- settings = Settings.from_env(_env_file())
- generated = build_creation_query_batch(
- settings,
- tree_path=TREES,
- options=QueryBuildOptions(
- per=per,
- dry=dry,
- active_family_keys=("f1", "f2"),
- ),
- )
- generated["summary"] = _summary(generated)
- return generated
- @router.get("/latest-singleton")
- def latest_singleton_overview(repo: Any = Depends(get_acquisition_repository)) -> dict[str, Any]:
- """Return links from the query preview board to the latest real singleton run."""
- getter = getattr(repo, "get_latest_singleton_overview", None)
- if getter is None:
- return {"batch": None, "run": None, "queries": [], "decoded_items": []}
- return getter()
|