"""Point d'entree pour le CLI gitea-dashboard.""" from __future__ import annotations import argparse import os import sys import requests from rich.console import Console from gitea_dashboard.client import GiteaClient from gitea_dashboard.collector import collect_all from gitea_dashboard.display import render_dashboard _DEFAULT_URL = "http://192.168.0.106:3000" def parse_args(argv: list[str] | None = None) -> argparse.Namespace: """Parse les arguments CLI. Options: --repo / -r : noms de repos a inclure (repeatable) --exclude / -x : noms de repos a exclure (repeatable) Returns: Namespace avec .repo (list[str] | None) et .exclude (list[str] | None) """ parser = argparse.ArgumentParser( description="Dashboard CLI affichant l'etat des repos Gitea.", ) parser.add_argument( "--repo", "-r", action="append", default=None, help="Filtrer par nom de repo (sous-chaine, insensible a la casse). Repeatable.", ) parser.add_argument( "--exclude", "-x", action="append", default=None, help="Exclure les repos par nom (sous-chaine, insensible a la casse). Repeatable.", ) return parser.parse_args(argv) def main(argv: list[str] | None = None) -> None: """Point d'entree principal. Args: argv: Arguments CLI. Si None, utilise sys.argv (via argparse). 1. Parse les options CLI (--repo, --exclude) 2. Lit GITEA_URL (defaut: http://192.168.0.106:3000) et GITEA_TOKEN (requis) 3. Cree le GiteaClient 4. Collecte les donnees via collect_all() avec filtres 5. Affiche via render_dashboard() 6. Gere les erreurs : config manquante, connexion refusee, timeout """ args = parse_args(argv) console = Console(stderr=True) token = os.environ.get("GITEA_TOKEN") if not token: console.print( "[red]Erreur : GITEA_TOKEN non defini. Exportez la variable d'environnement.[/red]" ) sys.exit(1) url = os.environ.get("GITEA_URL", _DEFAULT_URL) client = GiteaClient(url, token) try: repos = collect_all(client, include=args.repo, exclude=args.exclude) except requests.ConnectionError: console.print("[red]Erreur : connexion refusee. Verifiez l'URL et le serveur Gitea.[/red]") sys.exit(1) except requests.Timeout: console.print( "[red]Erreur : delai d'attente depasse. Le serveur Gitea ne repond pas.[/red]" ) sys.exit(1) except requests.RequestException as exc: # Ne jamais afficher le token dans les messages d'erreur msg = str(exc) if token in msg: msg = msg.replace(token, "***") console.print(f"[red]Erreur API : {msg}[/red]") sys.exit(1) render_dashboard(repos)