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
87 lines
4.0 KiB
Python
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)
|