Module demo_api.utils.services.data_manager
Gestionnaire de données centralisé pour éviter les requêtes multiples
Classes
class DataManager (api_client: utils.api.ApiClient)-
Expand source code
class DataManager: """Gestionnaire centralisé des données pour éviter les requêtes multiples""" def __init__(self, api_client: Api): """ Initialise le gestionnaire de données Args: api_client: Client API unifié """ self.api = api_client self._users_cache: Optional[List[Dict[str, Any]]] = None self._vms_cache: Optional[List[Dict[str, Any]]] = None self._data_fetched = False def fetch_all_data(self) -> Tuple[List[Dict[str, Any]], List[Dict[str, Any]]]: """ Récupère toutes les données nécessaires (utilisateurs et VMs) en une seule fois Returns: Tuple contenant (users, vms) ou ([], []) en cas d'erreur """ if self._data_fetched: logger.info("Utilisation des données en cache") return self._users_cache or [], self._vms_cache or [] logger.info("Début de récupération centralisée des données") # Récupération des utilisateurs try: self._users_cache = self.api.users.get() logger.info("Utilisateurs récupérés", count=len(self._users_cache)) except UsersFetchError as e: logger.error("Impossible de récupérer les utilisateurs", error=str(e)) self._users_cache = [] # Récupération des VMs try: self._vms_cache = self.api.vms.get() logger.info("VMs récupérées", count=len(self._vms_cache)) except VMsFetchError as e: logger.error("Impossible de récupérer les VMs", error=str(e)) self._vms_cache = [] self._data_fetched = True logger.info("Récupération centralisée des données terminée") return self._users_cache or [], self._vms_cache or [] def get_users(self) -> List[Dict[str, Any]]: """ Retourne les utilisateurs (doit être appelé après fetch_all_data) Returns: Liste des utilisateurs """ if not self._data_fetched: raise RuntimeError("fetch_all_data() doit être appelé avant get_users()") return self._users_cache or [] def get_vms(self) -> List[Dict[str, Any]]: """ Retourne les VMs (doit être appelé après fetch_all_data) Returns: Liste des VMs """ if not self._data_fetched: raise RuntimeError("fetch_all_data() doit être appelé avant get_vms()") return self._vms_cache or [] def get_users_with_vms(self) -> List[Dict[str, Any]]: """ Retourne les utilisateurs avec leurs VMs associées Returns: Liste des utilisateurs avec leurs VMs """ users = self.get_users() vms = self.get_vms() # Associer les VMs aux utilisateurs self.api.users.add_vms_to_users(users, vms) return users def clear_cache(self) -> None: """Vide le cache des données""" self._users_cache = None self._vms_cache = None self._data_fetched = False logger.info("Cache des données vidé") @property def is_data_loaded(self) -> bool: """Indique si les données sont chargées""" return self._data_fetchedGestionnaire centralisé des données pour éviter les requêtes multiples
Initialise le gestionnaire de données
Args
api_client- Client API unifié
Instance variables
prop is_data_loaded : bool-
Expand source code
@property def is_data_loaded(self) -> bool: """Indique si les données sont chargées""" return self._data_fetchedIndique si les données sont chargées
Methods
def clear_cache(self) ‑> None-
Expand source code
def clear_cache(self) -> None: """Vide le cache des données""" self._users_cache = None self._vms_cache = None self._data_fetched = False logger.info("Cache des données vidé")Vide le cache des données
def fetch_all_data(self) ‑> Tuple[List[Dict[str, Any]], List[Dict[str, Any]]]-
Expand source code
def fetch_all_data(self) -> Tuple[List[Dict[str, Any]], List[Dict[str, Any]]]: """ Récupère toutes les données nécessaires (utilisateurs et VMs) en une seule fois Returns: Tuple contenant (users, vms) ou ([], []) en cas d'erreur """ if self._data_fetched: logger.info("Utilisation des données en cache") return self._users_cache or [], self._vms_cache or [] logger.info("Début de récupération centralisée des données") # Récupération des utilisateurs try: self._users_cache = self.api.users.get() logger.info("Utilisateurs récupérés", count=len(self._users_cache)) except UsersFetchError as e: logger.error("Impossible de récupérer les utilisateurs", error=str(e)) self._users_cache = [] # Récupération des VMs try: self._vms_cache = self.api.vms.get() logger.info("VMs récupérées", count=len(self._vms_cache)) except VMsFetchError as e: logger.error("Impossible de récupérer les VMs", error=str(e)) self._vms_cache = [] self._data_fetched = True logger.info("Récupération centralisée des données terminée") return self._users_cache or [], self._vms_cache or []Récupère toutes les données nécessaires (utilisateurs et VMs) en une seule fois
Returns
Tuple contenant (users, vms) ou ([], []) en cas d'erreur
def get_users(self) ‑> List[Dict[str, Any]]-
Expand source code
def get_users(self) -> List[Dict[str, Any]]: """ Retourne les utilisateurs (doit être appelé après fetch_all_data) Returns: Liste des utilisateurs """ if not self._data_fetched: raise RuntimeError("fetch_all_data() doit être appelé avant get_users()") return self._users_cache or []Retourne les utilisateurs (doit être appelé après fetch_all_data)
Returns
Liste des utilisateurs
def get_users_with_vms(self) ‑> List[Dict[str, Any]]-
Expand source code
def get_users_with_vms(self) -> List[Dict[str, Any]]: """ Retourne les utilisateurs avec leurs VMs associées Returns: Liste des utilisateurs avec leurs VMs """ users = self.get_users() vms = self.get_vms() # Associer les VMs aux utilisateurs self.api.users.add_vms_to_users(users, vms) return usersRetourne les utilisateurs avec leurs VMs associées
Returns
Liste des utilisateurs avec leurs VMs
def get_vms(self) ‑> List[Dict[str, Any]]-
Expand source code
def get_vms(self) -> List[Dict[str, Any]]: """ Retourne les VMs (doit être appelé après fetch_all_data) Returns: Liste des VMs """ if not self._data_fetched: raise RuntimeError("fetch_all_data() doit être appelé avant get_vms()") return self._vms_cache or []Retourne les VMs (doit être appelé après fetch_all_data)
Returns
Liste des VMs