kink-discovery / scripts /audit_starter_deck.py
Perplexed7675's picture
Sync from kink_cli (Docker Space)
6ff91d6 verified
Raw
History Blame Contribute Delete
2.11 kB
#!/usr/bin/env python3
from __future__ import annotations
import argparse
import json
import os
from pathlib import Path
from backend.core import Backend
from backend.discovery_lanes import discovery_lane_for_kink
def starter_review_rows(backend: Backend, limit: int) -> list[dict[str, object]]:
rows: list[dict[str, object]] = []
for rank, kink in enumerate(backend._starter_candidates({}, limit), start=1):
rows.append(
{
"rank": rank,
"id": kink["id"],
"name": kink["name"],
"starter_tier": kink.get("starter_tier", ""),
"starter_reason": kink.get("starter_reason") or backend._starter_reason_for_kink(kink),
"lane": discovery_lane_for_kink(kink),
"starter_score": round(float(backend._starter_score(kink)), 3),
"source_backed_popularity": int(float(kink.get("source_backed_popularity", 0.0) or 0.0)),
"popularity": int(float(kink.get("popularity", 0.0) or 0.0)),
}
)
return rows
def build_parser() -> argparse.ArgumentParser:
parser = argparse.ArgumentParser(description="Print the current starter deck with policy reasons.")
parser.add_argument("--store", default=os.environ.get("KINK_STORE_PATH") or str(Path(__file__).resolve().parent.parent / "data" / "store_slim.db"))
parser.add_argument("--limit", type=int, default=24)
parser.add_argument("--json", action="store_true", help="Emit JSON instead of a text table.")
return parser
def main() -> int:
args = build_parser().parse_args()
backend = Backend(Path(args.store))
rows = starter_review_rows(backend, max(1, int(args.limit)))
if args.json:
print(json.dumps({"items": rows}, indent=2))
return 0
for row in rows:
print(
f"{row['rank']:>2} {row['starter_tier']:<13} {row['lane']:<10} "
f"{row['source_backed_popularity']:>8} {row['name']} -- {row['starter_reason']}"
)
return 0
if __name__ == "__main__":
raise SystemExit(main())