61 lines
2.0 KiB
Python
61 lines
2.0 KiB
Python
import logging
|
|
from pathlib import Path
|
|
from flask import Blueprint, render_template, current_app
|
|
|
|
# Import de notre fonction utilitaire
|
|
from .utils import build_image_structure
|
|
|
|
# Création d'un Blueprint (collection de routes) nommé 'gallery'
|
|
app = Blueprint('gallery', __name__)
|
|
|
|
|
|
@app.route('/')
|
|
def index() -> str:
|
|
"""Affiche la galerie d'images de manière robuste."""
|
|
|
|
# On utilise pathlib pour construire le chemin
|
|
image_dir = Path(current_app.static_folder) / 'images'
|
|
|
|
try:
|
|
# On appelle notre fonction pour construire la structure de données
|
|
structured_images = build_image_structure(image_dir)
|
|
|
|
error_message = None
|
|
if not structured_images:
|
|
error_message = "Aucune image valide n'a été trouvée dans la galerie."
|
|
|
|
except Exception as e:
|
|
logging.error(f"Une erreur est survenue lors de la création de la galerie : {e}")
|
|
structured_images = {}
|
|
error_message = "Une erreur serveur a empêché l'affichage de la galerie."
|
|
|
|
return render_template(
|
|
'gallery.html',
|
|
structured_images=structured_images,
|
|
error_message=error_message
|
|
)
|
|
|
|
|
|
@app.route('/api/images')
|
|
def api_images():
|
|
"""Retourne la liste des images de la galerie au format JSON."""
|
|
image_dir = Path(current_app.static_folder) / 'images'
|
|
|
|
try:
|
|
structured_images = build_image_structure(image_dir)
|
|
|
|
if not structured_images:
|
|
# On retourne le dictionnaire d'erreur et le code de statut
|
|
# Flask s'occupe de la conversion en JSON
|
|
return {'error': "Aucune image n'a été trouvée"}, 404
|
|
|
|
# On retourne directement le dictionnaire des images
|
|
# Flask s'occupe du reste !
|
|
return structured_images, 200 # Le 200 (OK) est le défaut, mais c'est bien d'être explicite
|
|
|
|
except Exception as e:
|
|
logging.error(f"Erreur API lors de la récupération des images : {e}")
|
|
# Idem pour l'erreur serveur
|
|
return {'error': "Erreur interne du serveur"}, 500
|
|
|