Source code for reports.base

"""
Classe de base pour tous les générateurs de rapports
"""

from abc import ABC, abstractmethod
from typing import Dict, Any, List, Optional
from datetime import datetime
import os
from utils.logging_config import get_logger

logger = get_logger(__name__)


[docs] class BaseReportGenerator(ABC): """Classe de base abstraite pour tous les générateurs de rapports"""
[docs] def __init__(self, output_directory: str = "outputs"): """ Initialise le générateur de rapport Args: output_directory: Dossier de sortie pour les rapports """ self.output_directory = output_directory self._ensure_output_directory()
def _ensure_output_directory(self) -> None: """Crée le dossier de sortie s'il n'existe pas""" if not os.path.exists(self.output_directory): os.makedirs(self.output_directory, exist_ok=True) logger.info(f"Dossier de sortie créé: {self.output_directory}") def _generate_filename( self, base_name: str, extension: str, timestamp: bool = True ) -> str: """ Génère un nom de fichier avec timestamp optionnel Args: base_name: Nom de base du fichier extension: Extension du fichier timestamp: Ajouter un timestamp au nom Returns: str: Nom de fichier complet """ if timestamp: timestamp_str = datetime.now().strftime("%Y%m%d_%H%M%S") filename = f"{base_name}_{timestamp_str}.{extension}" else: filename = f"{base_name}.{extension}" return os.path.join(self.output_directory, filename) def _get_metadata(self) -> Dict[str, Any]: """Retourne les métadonnées du rapport""" return { "generated_at": datetime.now().isoformat(), "generator": self.__class__.__name__, "version": "1.0.0", }
[docs] @abstractmethod def generate(self, data: Any, filename: Optional[str] = None) -> str: """ Génère un rapport Args: data: Données à inclure dans le rapport filename: Nom de fichier personnalisé (optionnel) Returns: str: Chemin vers le fichier généré """ pass
[docs] @abstractmethod def get_extension(self) -> str: """ Retourne l'extension des fichiers générés par ce rapport Returns: str: Extension (ex: "json", "html", "md") """ pass