"""Point d'entrée : dispatch des verbes, rien d'autre. Depuis l'étape 8 du plan de remédiation (AUDIT-2026-08-13.md, section 20), la logique métier vit dans cinq modules séparés : - blink_auth.py : session Blink, identifiants, 2FA (8.1) ; - blink_models.py : clips USB/cloud, identité, chemins (8.2) ; - blink_registre.py : registre incrémental, corrélation, réparation (8.3) ; - blink_engine.py : un passage de téléchargement, en boucle ou une fois (8.4) ; - blink_cli.py : grammaire, verbes délégués, supervision (8.5). Ce fichier ne fait plus que router (8.6). `runtime.bootstrap()` n'est plus appelé ici : blink_cli.py le fait, juste avant d'importer les modules qui ont réellement besoin d'aiohttp ou de blinkpy (main, la branche « start » de executer, accueillir) — jamais pour --help, --version, stop, open ou update (O-06/8.7/8.8).""" import sys # asyncio/datetime/time ne servent à rien ici : ce sont des modules stdlib # partagés (Python les met en cache une seule fois), gardés importés pour que # les tests qui patchent `blink2video.time`/`.asyncio`/`.dt` continuent # d'atteindre le même objet que blink_engine.py/blink_cli.py, sans connaître # ces modules internes. import asyncio # noqa: F401 import datetime as dt # noqa: F401 import time # noqa: F401 import runtime if __name__ == "__main__" and sys.argv[1:2] == ["--self-test-version"]: # La mise à jour commune (nico579_commons.maj_install) lance ainsi la version # téléchargée, depuis son dossier de préparation, avant de l'installer : 0 si elle # se reconnaît, 1 sinon. Tout en haut, avant preparer_etat() : ce lancement ne doit # toucher à aucun dossier d'état ni de sorties. attendue = (sys.argv[2] if len(sys.argv) > 2 else "").strip().lstrip("vV") raise SystemExit(0 if attendue == runtime.VERSION else 1) if __name__ == "__main__": # Avant blink_cli : ses modules tirent des constantes du dossier d'état # et de celui des sorties dès leur import. Reprend, une fois, l'état # d'une version ≤ 0.13. Au lancement seulement : un test qui importe ce # module ne doit jamais toucher au vrai dossier d'état. runtime.preparer_etat() from blink_cli import msg, route # noqa: E402 if __name__ == "__main__": try: raise SystemExit(route(sys.argv[1:])) except ValueError as erreur: print(f"{erreur}. " + msg("liste_verbes", liste=", ".join(runtime.VERBES))) raise SystemExit(2) except (KeyboardInterrupt, EOFError): print(msg("connexion_annulee")) raise SystemExit(130)