Corrige plusieurs problèmes dans les onglets du frontend pour améliorer la stabilité et la gestion des données : frontend/app_tab3.py : Remplace st.session_state['content'] par st.session_state['markdown'] pour assurer la cohérence de la clé de session. Ajoute des valeurs par défaut aux appels .get() pour les champs de paramètres (couleur des liens, moteur PDF, taille de police, dimensions du papier, marges, FPS, temps d'arrêt) afin d'éviter les erreurs de type None. frontend/app_tab4.py : Améliore la gestion des erreurs lors de la récupération des listes d'images et des images individuelles en vérifiant les codes de statut HTTP. Ajoute une gestion pour le scénario où aucune image n'est disponible, affichant un message informatif à l'utilisateur.
82 lines
No EOL
4.4 KiB
Python
82 lines
No EOL
4.4 KiB
Python
# Importation des modules nécessaires
|
|
import datetime # Pour manipuler les dates et heures
|
|
import requests # Pour effectuer des requêtes HTTP
|
|
import streamlit as st # Pour créer l'interface utilisateur web
|
|
|
|
# Importation de la classe DocumentSpecs depuis le module models
|
|
from models import DocumentSpecs
|
|
|
|
# Définition de la fonction principale pour l'onglet 3 de l'application
|
|
def app_tab3():
|
|
# Affichage d'un en-tête dans l'interface utilisateur
|
|
st.header("Paramètres")
|
|
|
|
# Préparation des en-têtes HTTP pour l'authentification
|
|
http_headers = {"Authorization": f"Bearer {st.session_state['bearer_token']}"}
|
|
|
|
# Récupération et sélection des styles disponibles
|
|
response_styles = requests.get(f"{st.session_state['fabriquedoc_endpoint']}/styles/", headers=http_headers).json()
|
|
styles = response_styles.get("styles")
|
|
selected_style = st.selectbox("Sélectionnez un style:", styles)
|
|
|
|
# Récupération et sélection des formats disponibles pour le style choisi
|
|
response_formats = requests.get(f"{st.session_state['fabriquedoc_endpoint']}/formats/{selected_style}/", headers=http_headers).json()
|
|
formats = response_formats.get("formats")
|
|
selected_format = st.selectbox("Sélectionnez un format:", formats)
|
|
|
|
# Récupération des paramètres de format pour le style et le format choisis
|
|
response_format_parameters = requests.get(
|
|
f"{st.session_state['fabriquedoc_endpoint']}/format_parameters/{selected_style}/{selected_format}/", headers=http_headers).json()
|
|
|
|
# Création des champs de saisie pour les différents paramètres
|
|
linkcolor = st.text_input("Couleur des liens:", value=response_format_parameters.get("linkcolor", ""))
|
|
pdfengine = st.text_input("Moteur PDF:", value=response_format_parameters.get("pdfengine", ""))
|
|
fontsize = st.number_input("Taille de la police:", value=int(response_format_parameters.get("fontsize", 0)), step=1)
|
|
paperwidth = st.number_input("Largeur du papier:", value=int(response_format_parameters.get("paperwidth", 0)), step=30)
|
|
paperheight = st.number_input("Hauteur du papier:", value=int(response_format_parameters.get("paperheight", 0)), step=30)
|
|
margin = st.number_input("Marge:", value=int(response_format_parameters.get("margin", 0)), step=10)
|
|
vmargin = st.number_input("Marge verticale:", value=int(response_format_parameters.get("vmargin", 0)), step=10)
|
|
fps = st.number_input("Images par seconde:", value=int(response_format_parameters.get("fps", 0)), step=1)
|
|
stilltime = st.number_input("Temps d'arrêt:", value=int(response_format_parameters.get("stilltime", 0)), step=1)
|
|
|
|
# Création d'un bouton pour générer le document
|
|
if st.button("Générer le document"):
|
|
# Création d'un objet DocumentSpecs avec les paramètres saisis
|
|
document_specs = DocumentSpecs(
|
|
format=selected_format,
|
|
style=selected_style,
|
|
linkcolor=linkcolor,
|
|
pdfengine=pdfengine,
|
|
content=st.session_state['markdown'],
|
|
fontsize=fontsize,
|
|
paperwidth=paperwidth,
|
|
paperheight=paperheight,
|
|
margin=margin,
|
|
vmargin=vmargin,
|
|
fps=fps,
|
|
stilltime=stilltime
|
|
)
|
|
|
|
# Préparation des en-têtes pour la requête POST
|
|
post_headers = http_headers | {"Content-Type": "application/json"}
|
|
|
|
# Envoi de la requête POST pour générer le document
|
|
response = requests.post(f"{st.session_state['fabriquedoc_endpoint']}/generer/",
|
|
json=document_specs.model_dump(),
|
|
headers=post_headers,
|
|
timeout=(30, 3000)) # 30 secondes de timeout pour la connexion, 5 minutes pour la lecture
|
|
|
|
# Vérification du code de statut de la réponse
|
|
if 200 <= response.status_code <= 299:
|
|
# Si la requête est réussie, récupération des données du fichier
|
|
file_data = response.content
|
|
datef = datetime.datetime.now().strftime("%m-%d-%Y")
|
|
|
|
# Création du nom de fichier
|
|
file_name = f"{document_specs.style}-{document_specs.format}-{datef}-output.zip"
|
|
|
|
# Affichage d'un bouton de téléchargement
|
|
st.download_button('Télécharger', file_data, file_name=file_name)
|
|
else:
|
|
# Si la requête échoue, affichage d'un message d'erreur
|
|
st.error(f"La requête a échoué avec le code d'état {response.status_code}: {response.text}") |