Module demo_api.reports.base

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

Classes

class BaseReportGenerator (output_directory: str = 'outputs')
Expand source code
class BaseReportGenerator(ABC):
    """Classe de base abstraite pour tous les générateurs de rapports"""

    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",
        }

    @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

    @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

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

Initialise le générateur de rapport

Args

output_directory
Dossier de sortie pour les rapports

Ancestors

  • abc.ABC

Subclasses

Methods

def generate(self, data: Any, filename: str | None = None) ‑> str
Expand source code
@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

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é
def get_extension(self) ‑> str
Expand source code
@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

Retourne l'extension des fichiers générés par ce rapport

Returns

str
Extension (ex: "json", "html", "md")