#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Exemple d'intégration de l'extracteur d'images HTML dans un flux de traitement de ticket. Ce script montre comment utiliser l'extracteur d'images HTML comme une étape dans un processus d'analyse de tickets, par exemple dans un orchestrateur ou un analyseur de tickets. """ import os import sys import json import logging from typing import Dict, Any, List # Ajouter le répertoire parent au chemin de recherche parent_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), '../../..')) sys.path.append(parent_dir) # Importer l'extracteur d'images HTML from utils.image_extractor import extract_images_from_ticket from utils.image_extractor.extract_all_images import enhance_ticket_data_with_images def setup_logging(): """Configure la journalisation.""" logging.basicConfig( level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', datefmt='%Y-%m-%d %H:%M:%S' ) def process_ticket(ticket_dir: str) -> Dict[str, Any]: """ Exemple de fonction qui traite un ticket complet. Args: ticket_dir: Répertoire contenant les données du ticket Returns: Données du ticket enrichies """ logging.info(f"Traitement du ticket dans: {ticket_dir}") # 1. Charger les informations de base du ticket ticket_data = load_ticket_data(ticket_dir) # 2. Extraire les images HTML logging.info("Extraction des images intégrées dans le HTML...") html_images = extract_images_from_ticket(ticket_dir) # 3. Enrichir les données du ticket avec toutes les images ticket_data["ticket_dir"] = ticket_dir enhanced_data = enhance_ticket_data_with_images(ticket_data) # 4. Ajouter des statistiques sur les images stats = enhanced_data.get("images_stats", {}) logging.info(f"Images trouvées: {stats.get('total', 0)} total, " + f"{stats.get('standard', 0)} standard, " + f"{stats.get('embedded', 0)} intégrées") # 5. Hypothétiquement, effectuer une analyse des images analyze_images(enhanced_data.get("images", [])) return enhanced_data def load_ticket_data(ticket_dir: str) -> Dict[str, Any]: """ Charge les données du ticket depuis les fichiers JSON. Args: ticket_dir: Répertoire contenant les données du ticket Returns: Données du ticket chargées """ ticket_data = {} # Charger les informations du ticket ticket_info_path = os.path.join(ticket_dir, "ticket_info.json") if os.path.exists(ticket_info_path): with open(ticket_info_path, 'r', encoding='utf-8') as f: ticket_data["ticket_info"] = json.load(f) # Charger le résumé du ticket ticket_summary_path = os.path.join(ticket_dir, "ticket_summary.json") if os.path.exists(ticket_summary_path): with open(ticket_summary_path, 'r', encoding='utf-8') as f: ticket_data["ticket_summary"] = json.load(f) # Charger les pièces jointes attachments_path = os.path.join(ticket_dir, "attachments_info.json") if os.path.exists(attachments_path): with open(attachments_path, 'r', encoding='utf-8') as f: ticket_data["attachments"] = json.load(f) # Charger les messages messages_path = os.path.join(ticket_dir, "all_messages.json") if os.path.exists(messages_path): with open(messages_path, 'r', encoding='utf-8') as f: ticket_data["messages"] = json.load(f) return ticket_data def analyze_images(image_paths: List[str]): """ Exemple de fonction qui analyse les images d'un ticket. Cette fonction pourrait utiliser un modèle de vision ou une API externe. Args: image_paths: Liste des chemins d'images à analyser """ logging.info(f"Analyse de {len(image_paths)} images...") # Simuler une analyse d'images for i, img_path in enumerate(image_paths): if os.path.exists(img_path): logging.info(f" Analyse de l'image {i+1}: {os.path.basename(img_path)}") # TODO: Intégrer votre logique d'analyse d'image ici def save_results(ticket_data: Dict[str, Any], output_file: str): """ Sauvegarde les résultats de l'analyse. Args: ticket_data: Données du ticket à sauvegarder output_file: Chemin du fichier de sortie """ # Créer le répertoire de sortie si nécessaire output_dir = os.path.dirname(output_file) if output_dir and not os.path.exists(output_dir): os.makedirs(output_dir, exist_ok=True) # Sauvegarder les résultats with open(output_file, 'w', encoding='utf-8') as f: json.dump(ticket_data, f, indent=2, ensure_ascii=False) logging.info(f"Résultats sauvegardés dans: {output_file}") def main(): """Fonction principale.""" # Configurer la journalisation setup_logging() # Récupérer le chemin du répertoire de ticket if len(sys.argv) > 1: ticket_dir = sys.argv[1] else: # Utiliser un répertoire de test par défaut ticket_dir = os.path.join(parent_dir, "output", "ticket_T0241", "T0241_20250409_141018") # Vérifier que le répertoire existe if not os.path.exists(ticket_dir): logging.error(f"Répertoire introuvable: {ticket_dir}") sys.exit(1) # Traiter le ticket ticket_data = process_ticket(ticket_dir) # Sauvegarder les résultats output_file = os.path.join(ticket_dir, "ticket_analysis.json") save_results(ticket_data, output_file) # Afficher un résumé ticket_code = ticket_data.get("ticket_summary", {}).get("code", os.path.basename(ticket_dir)) print(f"\nAnalyse du ticket {ticket_code} terminée.") print(f"Résultats sauvegardés dans: {output_file}") if __name__ == "__main__": main()