from rapt.client import ClientException from rapt.model.fermentation_chamber import FermentationChamberModel, FermentationChamberTelemetryModel from typing import Optional, List from pydantic import TypeAdapter from loguru import logger class FermentationChamber(): def __init__(self, client) -> None: self.client = client async def get_fermentation_chambers(self) -> Optional[List[FermentationChamberModel]]: logger.debug("## GET FERMENTATION CHAMBERS ##") try: response_json = await self.client.get_json("/api/fermentationchambers/getfermentationchambers", None) logger.trace(response_json) fermentation_chambers_adapter = TypeAdapter(list[FermentationChamberModel]) return fermentation_chambers_adapter.validate_python(response_json) except ClientException: #TODO: Handle Exception gracefully return None async def get_fermentation_chamber(self, fermentation_chamber_id) -> Optional[FermentationChamberModel]: logger.debug("## GET FERMENTATION CHAMBER ##") params = { "fermentationChamberId": fermentation_chamber_id } try: response_json = await self.client.get_json("/api/fermentationchambers/getfermentationchamber", params) logger.trace(response_json) return FermentationChamberModel.model_validate(response_json) except ClientException: #TODO: Handle Exception gracefully return None async def get_telemetry(self, fermentation_chamber_id, start_date, end_date, profile_session_id) -> Optional[List[FermentationChamberTelemetryModel]]: logger.debug("## GET TELEMETRY ##") params = { "fermentationChamberId": fermentation_chamber_id, "startDate": start_date, "endDate": end_date, "profileSessionId": profile_session_id } try: response_json = await self.client.get_json("/api/fermentationchambers/gettelemetry", params) logger.trace(response_json) fermentation_chambers_adapter = TypeAdapter(list[FermentationChamberTelemetryModel]) return fermentation_chambers_adapter.validate_python(response_json) except ClientException: #TODO: Handle Exception gracefully return None