# === Constantes et imports === import streamlit as st import requests import os from utils.translations import _ from config import GITEA_TOKEN, GITEA_URL, ORGANISATION, DEPOT_FICHES, ENV, FICHES_CRITICITE from utils.gitea import charger_arborescence_fiches from utils.widgets import html_expander from app.fiches.utils import ( afficher_tickets_par_fiche, formulaire_creation_ticket_dynamique, rechercher_tickets_gitea, load_seuils, doit_regenerer_fiche ) from app.fiches.generer import generer_fiche def interface_fiches() -> None: st.markdown(f"# {str(_('pages.fiches.title'))}") html_expander(f"{str(_('pages.fiches.help'))}", content="\n".join(_("pages.fiches.help_content")), open_by_default=False, details_class="details_introduction") st.markdown("---") if "fiches_arbo" not in st.session_state: st.session_state["fiches_arbo"] = charger_arborescence_fiches() arbo = st.session_state.get("fiches_arbo", {}) if not arbo: st.warning(str(_("pages.fiches.no_files"))) return dossiers = sorted(arbo.keys(), key=lambda x: x.lower()) if "dossier_choisi" not in st.session_state or st.session_state["dossier_choisi"] not in dossiers: st.session_state["dossier_choisi"] = str(_("pages.fiches.select_folder")) try: index_dossier = [str(_("pages.fiches.select_folder"))] + dossiers idx = index_dossier.index(st.session_state["dossier_choisi"]) except ValueError: idx = 0 st.session_state["dossier_choisi"] = st.selectbox( str(_("pages.fiches.choose_category")), [str(_("pages.fiches.select_folder"))] + dossiers, index=idx ) dossier_choisi = st.session_state["dossier_choisi"] if dossier_choisi and dossier_choisi != str(_("pages.fiches.select_folder")): fiches = arbo.get(dossier_choisi, []) noms_fiches = [f['nom'] for f in fiches] if "fiche_choisie" not in st.session_state or st.session_state["fiche_choisie"] not in noms_fiches: st.session_state["fiche_choisie"] = str(_("pages.fiches.select_file")) try: index_fiche = [str(_("pages.fiches.select_file"))] + noms_fiches idx_fiche = index_fiche.index(st.session_state["fiche_choisie"]) except ValueError: idx_fiche = 0 st.session_state["fiche_choisie"] = st.selectbox( str(_("pages.fiches.choose_file")), [str(_("pages.fiches.select_file"))] + noms_fiches, index=idx_fiche ) fiche_choisie = st.session_state["fiche_choisie"] if fiche_choisie and fiche_choisie != str(_("pages.fiches.select_file")): fiche_info = next((f for f in fiches if f["nom"] == fiche_choisie), None) if fiche_info: try: headers = {"Authorization": f"token {GITEA_TOKEN}"} reponse_fiche = requests.get(fiche_info["download_url"], headers=headers) reponse_fiche.raise_for_status() md_source = reponse_fiche.text if "seuils" not in st.session_state: SEUILS = load_seuils("assets/config.yaml") st.session_state["seuils"] = SEUILS else: SEUILS = st.session_state["seuils"] nom_fiche = os.path.splitext(fiche_choisie)[0] html_path = os.path.join("HTML", dossier_choisi, nom_fiche + ".html") path_relative = f"Documents/{dossier_choisi}/{fiche_choisie}" commits_url = f"{GITEA_URL}/repos/{ORGANISATION}/{DEPOT_FICHES}/commits?path={path_relative}&sha={ENV}" regenerate = doit_regenerer_fiche( html_path=html_path, fiche_type=fiche_info.get("type", ""), fiche_choisie=fiche_choisie, commit_url=commits_url, fichiers_criticite=FICHES_CRITICITE ) if regenerate: html_path = generer_fiche(md_source, dossier_choisi, fiche_choisie, SEUILS) with open(html_path, "r", encoding="utf-8") as f: st.markdown(f.read(), unsafe_allow_html=True) from utils.persistance import get_champ_statut if not get_champ_statut("login") == "": pdf_name = nom_fiche + ".pdf" pdf_path = os.path.join("static", "Fiches", dossier_choisi, pdf_name) if os.path.exists(pdf_path): with open(pdf_path, "rb") as pdf_file: st.download_button( label=str(_("pages.fiches.download_pdf")), data=pdf_file, file_name=pdf_name, mime="application/pdf", help=str(_("pages.fiches.download_pdf")), key="telecharger_fiche_pdf" ) else: st.warning(str(_("pages.fiches.pdf_unavailable"))) st.markdown(f"## {str(_('pages.fiches.ticket_management'))}") afficher_tickets_par_fiche(rechercher_tickets_gitea(fiche_choisie)) formulaire_creation_ticket_dynamique(fiche_choisie) except Exception as e: st.error(f"{str(_('pages.fiches.loading_error'))} {e}")