Socle de la refonte GUI V6 (couche présentation uniquement, aucune logique de détection) : - license_store: stockage licence hors dépôt (%LOCALAPPDATA%/Aivanov | XDG), read/write atomique/delete, ne journalise aucun token - license_client: LicenseStatus + activate/check/local_status, session HTTP injectable, serveur indisponible géré sans crash, aucune clé privée - theme: 4 thèmes + couleurs de statut licence - app + tab_about: shell customtkinter minimal (header, bandeau licence, 3 onglets), onglet À propos étoffé - Pseudonymisation_Gui_V6.py: point d'entrée + --self-test (exit 0 sans fenêtre) - requirements.txt: customtkinter==5.2.2 Tests: 20 nouveaux (store sur vrais fichiers, client sur session injectée). Suite tests/unit: 167 passed, 0 régression. V5/moteur/managers/specs intacts. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
46 lines
1.3 KiB
Python
46 lines
1.3 KiB
Python
#!/usr/bin/env python3
|
|
"""Point d'entrée de la GUI V6 de Pseudonymisation.
|
|
|
|
Usage :
|
|
python Pseudonymisation_Gui_V6.py # lance la fenêtre
|
|
python Pseudonymisation_Gui_V6.py --self-test # importe l'app, sort 0, sans fenêtre
|
|
|
|
Le mode ``--self-test`` vérifie que tout le socle GUI V6 s'importe correctement
|
|
(utile en CI / build sans display). Il n'ouvre aucune fenêtre.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import sys
|
|
|
|
|
|
def _self_test() -> int:
|
|
"""Importe les modules du socle GUI V6 sans créer de fenêtre."""
|
|
from gui_v6 import app, license_client, license_store, theme # noqa: F401
|
|
from gui_v6.tabs import tab_about # noqa: F401
|
|
|
|
# Sanity check des contrats publics du socle.
|
|
assert hasattr(app, "AnonymisationApp")
|
|
assert hasattr(license_client, "LicenseClient")
|
|
assert hasattr(license_client, "LicenseStatus")
|
|
assert hasattr(license_store, "LicenseStore")
|
|
assert hasattr(tab_about, "AboutTab")
|
|
print("GUI V6 self-test OK")
|
|
return 0
|
|
|
|
|
|
def main(argv=None) -> int:
|
|
argv = list(sys.argv[1:] if argv is None else argv)
|
|
if "--self-test" in argv:
|
|
return _self_test()
|
|
|
|
from gui_v6.app import AnonymisationApp
|
|
|
|
application = AnonymisationApp()
|
|
application.mainloop()
|
|
return 0
|
|
|
|
|
|
if __name__ == "__main__":
|
|
raise SystemExit(main())
|