150 lines
4.3 KiB
Python
150 lines
4.3 KiB
Python
"""
|
|
Endpoints pour les refrigerants
|
|
"""
|
|
|
|
from fastapi import APIRouter, HTTPException, status
|
|
from typing import List
|
|
|
|
from app.models.refrigerant import (
|
|
RefrigerantInfo,
|
|
RefrigerantsListResponse
|
|
)
|
|
from app.core.refrigerant_loader import get_manager
|
|
|
|
|
|
router = APIRouter()
|
|
|
|
|
|
@router.get(
|
|
"/",
|
|
response_model=RefrigerantsListResponse,
|
|
summary="Liste des refrigerants disponibles",
|
|
description="Retourne la liste de tous les refrigerants supportes avec leur disponibilite"
|
|
)
|
|
async def list_refrigerants():
|
|
"""
|
|
Liste tous les refrigerants disponibles dans le systeme.
|
|
|
|
Retourne pour chaque refrigerant:
|
|
- name: Nom du refrigerant (ex: R134a, R410A)
|
|
- available: Si la bibliotheque est disponible
|
|
- loaded: Si le refrigerant est actuellement charge en memoire
|
|
- error: Message d'erreur si indisponible
|
|
|
|
Returns:
|
|
RefrigerantsListResponse: Liste des refrigerants avec statistiques
|
|
"""
|
|
try:
|
|
manager = get_manager()
|
|
refrigerants = manager.get_available_refrigerants()
|
|
|
|
available_count = sum(1 for r in refrigerants if r.get("available", False))
|
|
|
|
return RefrigerantsListResponse(
|
|
refrigerants=refrigerants,
|
|
total=len(refrigerants),
|
|
available_count=available_count
|
|
)
|
|
|
|
except Exception as e:
|
|
raise HTTPException(
|
|
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
|
detail=f"Erreur lors de la recuperation des refrigerants: {str(e)}"
|
|
)
|
|
|
|
|
|
@router.get(
|
|
"/{refrigerant_name}",
|
|
response_model=RefrigerantInfo,
|
|
summary="Informations sur un refrigerant specifique",
|
|
description="Retourne les informations detaillees d'un refrigerant"
|
|
)
|
|
async def get_refrigerant_info(refrigerant_name: str):
|
|
"""
|
|
Obtient les informations d'un refrigerant specifique.
|
|
|
|
Args:
|
|
refrigerant_name: Nom du refrigerant (ex: R134a, R410A)
|
|
|
|
Returns:
|
|
RefrigerantInfo: Informations du refrigerant
|
|
|
|
Raises:
|
|
404: Si le refrigerant n'existe pas
|
|
500: En cas d'erreur interne
|
|
"""
|
|
try:
|
|
manager = get_manager()
|
|
refrigerants = manager.get_available_refrigerants()
|
|
|
|
# Rechercher le refrigerant
|
|
refrig_info = next(
|
|
(r for r in refrigerants if r["name"] == refrigerant_name),
|
|
None
|
|
)
|
|
|
|
if refrig_info is None:
|
|
raise HTTPException(
|
|
status_code=status.HTTP_404_NOT_FOUND,
|
|
detail=f"Refrigerant '{refrigerant_name}' non trouve. "
|
|
f"Refrigerants disponibles: {', '.join(r['name'] for r in refrigerants)}"
|
|
)
|
|
|
|
return RefrigerantInfo(**refrig_info)
|
|
|
|
except HTTPException:
|
|
raise
|
|
except Exception as e:
|
|
raise HTTPException(
|
|
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
|
detail=f"Erreur lors de la recuperation du refrigerant: {str(e)}"
|
|
)
|
|
|
|
|
|
@router.post(
|
|
"/{refrigerant_name}/load",
|
|
response_model=RefrigerantInfo,
|
|
summary="Charger un refrigerant en memoire",
|
|
description="Charge explicitement un refrigerant en memoire pour accelerer les calculs"
|
|
)
|
|
async def load_refrigerant(refrigerant_name: str):
|
|
"""
|
|
Charge un refrigerant en memoire.
|
|
|
|
Utile pour precharger les refrigerants frequemment utilises
|
|
et ameliorer les performances.
|
|
|
|
Args:
|
|
refrigerant_name: Nom du refrigerant a charger
|
|
|
|
Returns:
|
|
RefrigerantInfo: Informations du refrigerant charge
|
|
|
|
Raises:
|
|
404: Si le refrigerant n'existe pas
|
|
500: Si le chargement echoue
|
|
"""
|
|
try:
|
|
manager = get_manager()
|
|
|
|
# Tenter de charger le refrigerant
|
|
lib = manager.load_refrigerant(refrigerant_name)
|
|
|
|
return RefrigerantInfo(
|
|
name=refrigerant_name,
|
|
available=True,
|
|
loaded=True
|
|
)
|
|
|
|
except ValueError as e:
|
|
# Refrigerant non supporte
|
|
raise HTTPException(
|
|
status_code=status.HTTP_404_NOT_FOUND,
|
|
detail=str(e)
|
|
)
|
|
except Exception as e:
|
|
# Erreur de chargement
|
|
raise HTTPException(
|
|
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
|
detail=f"Erreur lors du chargement de {refrigerant_name}: {str(e)}"
|
|
) |