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:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user