Files
RoadTripsGenerator/rtg/cli.py
T
FabriceandClaude Opus 5.5 06153a227e Interface locale : rtg interface (voyages, sources, journées, récit, génération)
Serveur web local sans dépendance nouvelle (http.server, Jinja2, htmx et
Leaflet fournis). Écrans : Mes voyages, nouveau voyage, un voyage (journées
avec carte, rattachement des traces sans heures à un jour avec suggestion
d'après les photos, sources avec choix de dossier, infos et récit,
génération avec avancement et arrêt), réglages du site et vérification
des outils.

Chaîne : jours imposés ([dates_traces] dans voyage.toml), arrêt propre de
la compression, suivi des étapes, état structuré (site.tableau_etat),
titre du voyage repris de voyage.toml sur l'accueil.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Mf2kATMtqVABHSYdxJMnim
2026-10-09 14:07:47 +00:00

87 lines
4.0 KiB
Python

"""Commande `rtg`.
rtg generer [VOYAGE…] tout faire (sources, positions, vidéos, photos, pages, accueil)
rtg etat avancement de chaque voyage
rtg analyser VOYAGE ce que RTG trouve dans les sources d'un voyage
rtg compresser VOYAGE seulement les vidéos
rtg accueil seulement la page d'accueil et la carte globale
rtg migrer écrire site.toml et les voyage.toml depuis l'existant
rtg verifier tout ce dont RTG a besoin est-il installé ?
rtg interface ouvrir l'interface dans le navigateur
La racine du site est le premier dossier, en remontant depuis le dossier
courant, qui contient site.toml (sinon le dossier courant) ; --racine la force.
"""
import argparse
import os
import sys
from rtg import __version__
def main(argv=None):
p = argparse.ArgumentParser(prog="rtg", description="RoadTripsGenerator : site web de road-trips.")
p.add_argument("--version", action="version", version=f"rtg {__version__}")
p.add_argument("--racine", help="racine du site (défaut : recherche de site.toml)")
sp = p.add_subparsers(dest="commande", required=True)
g = sp.add_parser("generer", help="générer un, plusieurs ou tous les voyages, puis l'accueil")
g.add_argument("voyages", nargs="*", help="dossiers des voyages (défaut : tous)")
g.add_argument("--sans-compression", action="store_true", help="ne pas encoder les vidéos")
g.add_argument("--force", action="store_true", help="tout refaire, même ce qui est à jour")
g.add_argument("--mymaps-maj", action="store_true", help="récupérer à nouveau les cartes My Maps")
sp.add_parser("etat", help="avancement de chaque voyage")
a = sp.add_parser("analyser", help="inventaire des sources d'un voyage")
a.add_argument("voyage")
c = sp.add_parser("compresser", help="encoder les vidéos d'un voyage")
c.add_argument("voyage")
c.add_argument("--force", action="store_true")
ac = sp.add_parser("accueil", help="régénérer l'accueil et la carte globale")
ac.add_argument("--mymaps-maj", action="store_true")
sp.add_parser("migrer", help="écrire site.toml et voyage.toml depuis l'organisation actuelle")
sp.add_parser("verifier", help="contrôler que Python, exiftool et ffmpeg sont bien installés")
i = sp.add_parser("interface", help="ouvrir l'interface dans le navigateur")
i.add_argument("--port", type=int, default=8765)
i.add_argument("--sans-navigateur", action="store_true", help="ne pas ouvrir le navigateur")
args = p.parse_args(argv)
if args.commande == "verifier":
# Avant tout autre import : doit fonctionner même si un module manque.
from rtg.verifier import verifier
sys.exit(0 if verifier() else 1)
from rtg import accueil, site, sources, video
from rtg.config import reglages_site, reglages_voyage, trouver_racine
racine = os.path.abspath(args.racine) if args.racine else trouver_racine(".")
try:
if args.commande == "generer":
ok = site.generer(racine, args.voyages, compression=not args.sans_compression,
force=args.force, mymaps_maj=args.mymaps_maj)
sys.exit(0 if ok else 1)
elif args.commande == "etat":
site.etat(racine)
elif args.commande == "analyser":
site.analyser(args.voyage, racine)
elif args.commande == "compresser":
v = os.path.abspath(args.voyage)
cfg = reglages_voyage(v, reglages_site(racine))
sys.exit(0 if video.compresser(v, cfg, sources.analyser(v, cfg), force=args.force) else 1)
elif args.commande == "accueil":
accueil.generer(racine, reglages_site(racine), args.mymaps_maj)
elif args.commande == "migrer":
site.migrer(racine)
elif args.commande == "interface":
from rtg.interface.serveur import lancer
lancer(racine, args.port, ouvrir=not args.sans_navigateur)
except KeyboardInterrupt:
print("\nInterrompu.")
sys.exit(130)