# === Constantes et imports === import streamlit as st import requests import os import pathlib from utils.translations import _ from .utils.tickets.display import afficher_tickets_par_fiche from .utils.tickets.creation import formulaire_creation_ticket_dynamique from .utils.tickets.core import rechercher_tickets_gitea from config import GITEA_TOKEN, GITEA_URL, ORGANISATION, DEPOT_FICHES, ENV, FICHES_CRITICITE from utils.gitea import charger_arborescence_fiches from .utils.fiche_utils import load_seuils, doit_regenerer_fiche from .generer import generer_fiche def interface_fiches(): st.markdown(f"# {str(_('pages.fiches.title', 'Découverte des fiches'))}") with st.expander(str(_("pages.fiches.help", "Comment utiliser cet onglet ?")), expanded=False): st.markdown("\n".join([ " " + line for line in _("pages.fiches.help_content", [ "1. Parcourez la liste des fiches disponibles par catégorie", "2. Sélectionnez une fiche pour afficher son contenu complet", "3. Consultez les données détaillées, graphiques et analyses supplémentaires", "4. Utilisez ces informations pour approfondir votre compréhension des vulnérabilités identifiées", "", "Les catégories sont les suivantes :", "* Assemblage : opération d'assemblage des produits finaux à partir des composants", "* Connexe : opérations diverses nécessaires pour fabriquer le numérique, mais n'entrant pas directement dans sa composition", "* Criticités : indices utilisés pour identifier et évaluer les vulnérabilités", "* Fabrication : opération de fabrication des composants à partir de minerais", "* Minerai : description et opérations d'extraction et de traitement des minerais" ]) ])) 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", "Aucune fiche disponible pour le moment."))) return dossiers = sorted(arbo.keys(), key=lambda x: x.lower()) dossier_choisi = st.selectbox( str(_("pages.fiches.choose_category", "Choisissez une catégorie de fiches")), [str(_("pages.fiches.select_folder", "-- Sélectionner un dossier --"))] + dossiers ) if dossier_choisi and dossier_choisi != str(_("pages.fiches.select_folder", "-- Sélectionner un dossier --")): fiches = arbo.get(dossier_choisi, []) noms_fiches = [f['nom'] for f in fiches] fiche_choisie = st.selectbox( str(_("pages.fiches.choose_file", "Choisissez une fiche")), [str(_("pages.fiches.select_file", "-- Sélectionner une fiche --"))] + noms_fiches ) if fiche_choisie and fiche_choisie != str(_("pages.fiches.select_file", "-- Sélectionner une fiche --")): 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) if st.session_state.get("logged_in", False): pdf_name = nom_fiche + ".pdf" pdf_path = os.path.join("static", "Fiches", dossier_choisi, pdf_name) # Bouton de téléchargement du PDF if os.path.exists(pdf_path): with open(pdf_path, "rb") as pdf_file: st.download_button( label=str(_("pages.fiches.download_pdf", "Télécharger cette fiche en PDF")), data=pdf_file, file_name=pdf_name, mime="application/pdf", help=str(_("pages.fiches.download_pdf", "Télécharger cette fiche en PDF")), key="telecharger_fiche_pdf" ) else: st.warning(str(_("pages.fiches.pdf_unavailable", "Le fichier PDF de cette fiche n'est pas disponible."))) st.markdown(f"## {str(_('pages.fiches.ticket_management', 'Gestion des tickets pour cette fiche'))}") 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', 'Erreur lors du chargement de la fiche :'))} {e}")