# ============================================================================== # Author: Simon-Pierre Boucher # File: run.py # Desc: CLI Sorti-Ka — sync (ingestion), watch (boucle périodique), # web (API FastAPI + frontend). Patron Lou-Ka : run.py. # ============================================================================== from __future__ import annotations import argparse import sys def main() -> int: parser = argparse.ArgumentParser( prog="sorti-ka", description="Sorti-Ka — toutes les sorties et tous les événements du Québec") sub = parser.add_subparsers(dest="cmd", required=True) p_sync = sub.add_parser("sync", help="exécuter l'ingestion (toutes les sources)") p_sync.add_argument("sources", nargs="*", help="ids de sources (défaut : toutes)") p_watch = sub.add_parser("watch", help="ingestion en boucle périodique") p_watch.add_argument("--interval", type=int, default=6 * 3600, help="intervalle en secondes (défaut : 21600 = 6 h)") p_web = sub.add_parser("web", help="lancer l'API + le frontend") p_web.add_argument("--host", default="127.0.0.1") p_web.add_argument("--port", type=int, default=8120) args = parser.parse_args() if args.cmd == "sync": from sortika import ingest results = ingest.run(args.sources or None) return 1 if any("error" in r for r in results) else 0 if args.cmd == "watch": from sortika import ingest ingest.watch(args.interval) return 0 if args.cmd == "web": import uvicorn uvicorn.run("sortika.web:app", host=args.host, port=args.port) return 0 return 2 if __name__ == "__main__": sys.exit(main())