import yaml import streamlit as st def get_seuil(seuils_dict: dict, key: str) -> float|None: """Récupère un seuil pour une clé donnée dans le dictionnaire. Args: seuils_dict (dict): Dictionnaire contenant les seuils. key (str): Clé du seuil à récupérer. Returns: float|None: Le seuil si existant, sinon None. """ try: if key in seuils_dict: data = seuils_dict[key] for niveau in ["rouge", "orange", "vert"]: if niveau in data: seuil = data[niveau] if "min" in seuil and seuil["min"] is not None: return seuil["min"] if "max" in seuil and seuil["max"] is not None: return seuil["max"] except: pass return None def set_vulnerability(v1: int, v2: int, t1: str, t2: str, seuils: dict) -> tuple[int,str,str,str]: """Calcule la vulnérabilité en fonction des seuils. Args: v1 (int): Valeur de vulnérabilité 1. v2 (int): Valeur de vulnérabilité 2. t1 (str): Type 1. t2 (str): Type 2. seuils (dict): Dictionnaire des seuils. Returns: tuple[int, str, str, str]: Poids et couleurs pour les deux types. """ v1_poids = 1 v1_couleur = "Vert" if v1 > seuils[t1]["rouge"]["min"]: v1_poids = 3 v1_couleur = "Rouge" elif v1 > seuils[t1]["vert"]["max"]: v1_poids = 2 v1_couleur = "Orange" v2_poids = 1 v2_couleur = "Vert" if v2 > seuils[t2]["rouge"]["min"]: v2_poids = 3 v2_couleur = "Rouge" elif v2 > seuils[t2]["vert"]["max"]: v2_poids = 2 v2_couleur = "Orange" poids = v1_poids * v2_poids couleur = "Rouge" if poids <= 2: couleur = "Vert" elif poids <= 4: couleur = "Orange" return poids, couleur, v1_couleur, v2_couleur def colorer_couleurs(la_couleur: str) -> str: """Convertit une couleur en badge Markdown. Args: la_couleur (str): Couleur à convertir (rouge/difficile, orange/modérée, vert/facile). Returns: str: Badge Markdown correspondant. """ t = la_couleur.lower() if t == "rouge" or t == "difficile": return f":red-badge[{la_couleur}]" if t == "orange" or t == "modérée": return f":orange-badge[{la_couleur}]" if t == "vert" or t == "facile": return f":green-badge[{la_couleur}]" return la_couleur def initialiser_seuils(config_path: str) -> dict: """Charge les seuils depuis un fichier YAML de configuration. Args: config_path (str): Chemin vers le fichier de configuration YAML. Returns: dict: Dictionnaire des seuils chargés. """ seuils = {} try: with open(config_path, "r", encoding="utf-8") as f: config = yaml.safe_load(f) seuils = config.get("seuils", seuils) except FileNotFoundError: st.warning(f"Fichier de configuration {config_path} non trouvé.") return seuils