#!/usr/bin/env python3 # ============================================================================= # Job·Ka — Groupe KA # Auteur : Simon-Pierre Boucher # Contact : contact@spboucher.ai # Fichier : run.py # Rôle : Point d'entrée — sync, watch, serve, geocode, record # Créé : 2026-08-17 Modifié : 2026-08-17 # ============================================================================= """Utilisation : python run.py sync [source ...] # synchronise les offres python run.py watch [minutes] # synchronise en boucle (défaut 60 min) python run.py serve [port] # démarre l'API + le frontend (défaut 8096) python run.py geocode [n] # géocode les offres sans coordonnées python run.py record # enregistre les fixtures de test d'une source """ from __future__ import annotations import os import sys from pathlib import Path # Charger .env (SCRAPFLY_API_KEY, etc.) sans dépendance externe _env = Path(__file__).parent / ".env" if _env.exists(): for line in _env.read_text().splitlines(): line = line.strip() if line and not line.startswith("#") and "=" in line: k, _, v = line.partition("=") os.environ.setdefault(k.strip(), v.strip()) def main() -> None: cmd = sys.argv[1] if len(sys.argv) > 1 else "serve" if cmd == "sync": from jobka import ingest ingest.run(sys.argv[2:] or None) elif cmd == "watch": from jobka import ingest minutes = int(sys.argv[2]) if len(sys.argv) > 2 else 60 ingest.watch(minutes * 60) elif cmd == "geocode": from jobka import geocode limit = int(sys.argv[2]) if len(sys.argv) > 2 else None geocode.run_batch(limit) elif cmd == "record": from jobka import fixtures from jobka.connectors import CONNECTORS targets = sys.argv[2:] or sorted(CONNECTORS) for sid in targets: try: print(f"[job-ka] record {sid} ... {fixtures.record(sid)}") except Exception as exc: print(f"[job-ka] record {sid} ÉCHEC : {exc}", file=sys.stderr) elif cmd == "serve": import uvicorn port = int(sys.argv[2]) if len(sys.argv) > 2 else 8096 uvicorn.run("jobka.web:app", host="0.0.0.0", port=port) else: print(__doc__) sys.exit(1) if __name__ == "__main__": main()