SPB Git

spb/toit-ka Public

Toit-Ka — louer ou acheter un toit au Québec, un seul endroit (fusion Lou-Ka × Immo-Ka) — www.toit-ka.com

Python 40.2% TypeScript 39% CSS 20.2% HTML 0.7%
2.0 KB · 62 lines python
Raw Blame History
1# Author: Simon-Pierre Boucher2# Contact: contact@spboucher.ai3# Project: Toit-Ka4# -----------------------------------------------------------------------------5# run.py : point d'entrée CLI unique de Toit-Ka6#   serve [port]      — API FastAPI + frontend (défaut 8097)7#   etl               — une passe : répliques -> toitka.db (normalisation villes/types)8#   watch [minutes]   — boucle : replicate (si configuré) + etl (défaut 30 min)9#   replicate         — tire les snapshots des BD lou-ka / immo-ka (nodes prod)10#   villes            — rapport de canonicalisation des villes (audit)11# -----------------------------------------------------------------------------12from __future__ import annotations1314import os15import sys16from pathlib import Path1718ROOT = Path(__file__).resolve().parent192021def _load_env() -> None:22    """Charge .env à la main (aucune dépendance), sans écraser l'environnement."""23    env = ROOT / ".env"24    if not env.exists():25        return26    for line in env.read_text(encoding="utf-8").splitlines():27        line = line.strip()28        if not line or line.startswith("#") or "=" not in line:29            continue30        k, _, v = line.partition("=")31        os.environ.setdefault(k.strip(), v.strip().strip('"').strip("'"))323334def main() -> None:35    _load_env()36    cmd = sys.argv[1] if len(sys.argv) > 1 else "serve"3738    if cmd == "serve":39        import uvicorn40        port = int(sys.argv[2]) if len(sys.argv) > 2 else 809741        uvicorn.run("toitka.web:app", host="0.0.0.0", port=port)42    elif cmd == "etl":43        from toitka import etl44        etl.run()45    elif cmd == "watch":46        from toitka import etl47        minutes = float(sys.argv[2]) if len(sys.argv) > 2 else 3048        etl.watch(minutes * 60)49    elif cmd == "replicate":50        from toitka import replicate51        replicate.run()52    elif cmd == "villes":53        from toitka import etl54        etl.rapport_villes()55    else:56        print(__doc__ or "Commandes : serve | etl | watch | replicate | villes")57        sys.exit(1)585960if __name__ == "__main__":61    main()62