Code source de config.caris_config

"""
Module de configuration pour l'API Python de Caris.

Ce module contient la classe de configuration pour l'API Python de Caris.
"""

from dataclasses import dataclass
from pathlib import Path

from loguru import logger
from pydantic import BaseModel, Field

from .helper import load_config

LOGGER = logger.bind(name="CSB-Processing.Caris.Config")

ConfigDict = dict[str, str | float]


[docs] @dataclass(frozen=True) class CarisConfigError(Exception): config_file: Path def __str__(self) -> str: return f"Aucune configuration pour Caris n'a été trouvée dans le fichier de configuration : {self.config_file}"
@dataclass(frozen=True) class CarisApiConfigError(Exception): python_path: Path def __str__(self) -> str: return f"L'API Python de Caris n'existe pas à l'emplacement {self.python_path}" @dataclass(frozen=True) class CarisBatchConfigError(Exception): caris_batch: Path def __str__(self) -> str: return ( f"Le fichier carisbatch.exe n'existe pas à l'emplacement {self.caris_batch}" )
[docs] class CarisAPIConfig(BaseModel): """ Classe de configuration pour Caris. :param base_path: Le chemin de base de Caris. :type base_path: str :param software: Le logiciel de Caris. :type software: str :param version: La version du logiciel de Caris. :type version: str :param python_version: La version de Python. :type python_version: str :param python_path: Le chemin de l'API Python de Caris. :type python_path: Path :raises ValueError: Si l'API Python de Caris n'existe pas à l'emplacement spécifié. """ base_path: str software: str version: str python_version: str python_path: Path = Field(default=None) caris_batch: Path = Field(default=None) args: list[str] = Field(default=None) def __init__(self, **values) -> None: super().__init__(**values) self.python_path = ( Path(self.base_path) / self.software / self.version / "python" / self.python_version ) if not self.python_path.exists(): raise CarisApiConfigError(python_path=self.python_path) self.caris_batch = ( Path(self.base_path) / self.software / self.version / "bin" / "carisbatch.exe" ) if not self.caris_batch.exists(): raise CarisBatchConfigError(caris_batch=self.caris_batch)
[docs] def get_caris_api_config( config_file: Path, ) -> CarisAPIConfig: """ Retournes la configuration pour Caris. :param config_file: Le chemin du fichier de configuration. :type config_file: Path :return: La configuration pour Caris. :rtype: CarisAPIConfig """ config_dict = load_config(config_file=config_file) config_caris_api: ConfigDict = ( config_dict.get("CARIS").get("Environment") if "CARIS" in config_dict else None ) if not config_caris_api: raise CarisConfigError(config_file=config_file) LOGGER.debug(f"Initialisation de la configuration pour Caris.") return CarisAPIConfig(**config_caris_api)