feat(cli): add main entry point with error handling (fixes #4)

Read GITEA_TOKEN (required) and GITEA_URL (default) from env vars,
orchestrate client/collect/render pipeline, handle connection and
timeout errors gracefully. Never expose token in error messages.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
sylvain
2026-03-10 18:54:29 +01:00
parent 8fbdfcafd4
commit 4aa648fa8c
2 changed files with 168 additions and 4 deletions

View File

@@ -1,6 +1,58 @@
"""Entry point for gitea-dashboard CLI."""
"""Point d'entree pour le CLI gitea-dashboard."""
from __future__ import annotations
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 main():
"""Run the dashboard."""
pass
def main() -> None:
"""Point d'entree principal.
1. Lit GITEA_URL (defaut: http://192.168.0.106:3000) et GITEA_TOKEN (requis)
2. Cree le GiteaClient
3. Collecte les donnees via collect_all()
4. Affiche via render_dashboard()
5. Gere les erreurs : config manquante, connexion refusee, timeout
"""
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)
except requests.ConnectionError:
console.print("[red]Erreur : connexion refusee. Verifiez l'URL et le serveur Gitea.[/red]")
return
except requests.Timeout:
console.print(
"[red]Erreur : delai d'attente depasse. Le serveur Gitea ne repond pas.[/red]"
)
return
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]")
return
render_dashboard(repos)