from __future__ import annotations import argparse import json import sys from .database import SessionLocal from .importer import import_records from .community_importer import stage_observations def main() -> int: parser = argparse.ArgumentParser(prog="python -m app.cli") sub = parser.add_subparsers(dest="command", required=True) command = sub.add_parser("import-records") command.add_argument("--url", default="https://rf4game.de/records/region/RU/") command.add_argument("--region", default="RU") command.add_argument("--category", default="records") community = sub.add_parser("stage-community-json") community.add_argument("--input", default="-", help="JSON array path or - for stdin") community.add_argument("--limit", type=int, default=500) args = parser.parse_args() with SessionLocal() as session: if args.command == "import-records": run = import_records(session, url=args.url, region=args.region, category=args.category) print(f"import {run.status.value}: seen={run.rows_seen} created={run.rows_created} updated={run.rows_updated}") else: if not 1 <= args.limit <= 5000: parser.error("--limit must be between 1 and 5000") stream = sys.stdin if args.input == "-" else open(args.input, encoding="utf-8") try: payload = json.load(stream) finally: if stream is not sys.stdin: stream.close() if not isinstance(payload, list): parser.error("input must be a JSON array") created, updated = stage_observations(session, payload[:args.limit]) print(f"staged: created={created} updated={updated}") return 0 if __name__ == "__main__": raise SystemExit(main())