diagram_ph/app/models/refrigerant.py

59 lines
2.5 KiB
Python

"""
Modeles Pydantic pour les refrigerants
"""
from typing import Optional, List
from pydantic import BaseModel, Field
class RefrigerantInfo(BaseModel):
"""Informations sur un refrigerant"""
name: str = Field(..., description="Nom du refrigerant (ex: R134a)")
available: bool = Field(..., description="Disponibilite de la bibliotheque")
loaded: bool = Field(default=False, description="Si charge en memoire")
error: Optional[str] = Field(None, description="Message d'erreur si indisponible")
class RefrigerantsListResponse(BaseModel):
"""Reponse pour la liste des refrigerants"""
refrigerants: List[RefrigerantInfo] = Field(..., description="Liste des refrigerants")
total: int = Field(..., description="Nombre total de refrigerants")
available_count: int = Field(..., description="Nombre de refrigerants disponibles")
class ThermodynamicProperties(BaseModel):
"""Proprietes thermodynamiques d'un point"""
temperature: float = Field(..., description="Temperature (K)")
pressure: float = Field(..., description="Pression (Pa)")
enthalpy: float = Field(..., description="Enthalpie (J/kg)")
entropy: float = Field(..., description="Entropie (J/kg.K)")
density: float = Field(..., description="Densite (kg/m3)")
quality: Optional[float] = Field(None, description="Qualite (0-1)", ge=0, le=1)
class SaturationProperties(BaseModel):
"""Proprietes de saturation"""
temperature_sat: float = Field(..., description="Temperature de saturation (K)")
pressure: float = Field(..., description="Pression (Pa)")
enthalpy_liquid: float = Field(..., description="Enthalpie liquide saturee (J/kg)")
enthalpy_vapor: float = Field(..., description="Enthalpie vapeur saturee (J/kg)")
density_liquid: float = Field(..., description="Densite liquide (kg/m3)")
density_vapor: float = Field(..., description="Densite vapeur (kg/m3)")
class PropertyRequest(BaseModel):
"""Requete pour calculer des proprietes"""
refrigerant: str = Field(..., description="Nom du refrigerant", example="R134a")
pressure: float = Field(..., description="Pression (Pa)", gt=0)
quality: Optional[float] = Field(None, description="Qualite (0-1)", ge=0, le=1)
temperature: Optional[float] = Field(None, description="Temperature (K)", gt=0)
enthalpy: Optional[float] = Field(None, description="Enthalpie (J/kg)")
class Config:
json_schema_extra = {
"example": {
"refrigerant": "R134a",
"pressure": 500000,
"quality": 0.5
}
}