from pydantic import Field from typing import Optional, List from enum import Enum from datetime import datetime from uuid import UUID from rapt.model.base import RaptBaseModel from rapt.model.yeast import YeastModel class ProfileAlertTriggers(str, Enum): StepStart = "StepStart", StepEnd = "StepEnd", Temperature = "Temperature", Gravity = "Gravity", GravityVelocity = "GravityVelocity", Duration = "Duration" class ProfileValueOperatorsNullable(str, Enum): Equals = "Equals", LessThan = "LessThan", GreaterThan = "GreaterThan", null = "null" class ProfileStepControlTypes(str, Enum): Target = "Target", Ramp = "Ramp", FreeRise = "FreeRise" class ProfileStepEndTypes(str, Enum): Duration = "Duration", Temperature = "Temperature", Gravity = "Gravity", GravityVelocity = "GravityVelocity", Manual = "Manual" class ProfileStepDurationTypesNullable(str, Enum): Start = "Start", Temperature = "Temperature", Gravity = "Gravity", GravityVelocity = "GravityVelocity", Manual = "Manual", null = "null" class ProfileAlertModel(RaptBaseModel): alert_text: str = Field(alias="alertText") trigger: ProfileAlertTriggers operator: ProfileValueOperatorsNullable temperature: float gravity: float profile_id: UUID = Field(alias="profileId") class ProfileStepAlertModel(RaptBaseModel): alert_text: Optional[str] = Field(alias="alertText") trigger: ProfileAlertTriggers operator: Optional[ProfileValueOperatorsNullable] temperature: Optional[float] gravity: Optional[float] length: Optional[int] profile_step_id: UUID = Field(alias="profileStepId") class ProfileStepModel(RaptBaseModel): name: Optional[str] order: int control_type: ProfileStepControlTypes = Field(alias="controlType") end_type: ProfileStepEndTypes = Field(alias="endType") duration_type: Optional[ProfileStepDurationTypesNullable] = Field(alias="durationType") operator: Optional[ProfileValueOperatorsNullable] length: Optional[int] temperature: Optional[float] min_temperature: Optional[float] = Field(alias="minTemperature") max_temperature: Optional[float] = Field(alias="maxTemperature") gravity: Optional[float] pump_enabled: Optional[bool] = Field(alias="pumpEnabled") pump_utilisation: Optional[float] = Field(alias="pumpUtilisation") heating_utilisation: Optional[float] = Field(alias="heatingUtilisation") pid_enabled: Optional[bool] = Field(alias="pidEnabled") sensor_differential: Optional[float] = Field(alias="sensorDifferential") profile_id: UUID = Field(alias="profileId") alerts: Optional[List[ProfileStepAlertModel]] class ProfileSessionModel(RaptBaseModel): name: Optional[str] description: Optional[str] profile_id: Optional[UUID] = Field(alias="profileId") # profile: ProfileModel brewzilla_id: Optional[UUID] = Field(alias="brewZillaId") fermentation_chamger_id: Optional[UUID] = Field(alias="fermentationChamberId") hydrometer_id: Optional[UUID] = Field(alias="hydrometerId") still_id: Optional[UUID] = Field(alias="stillId") temperature_controller_id: Optional[UUID] = Field(alias="temperatureControllerId") start_date: Optional[datetime] = Field(alias="startDate") end_date: Optional[datetime] = Field(alias="endDate") original_gravity: Optional[float] = Field(alias="originalGravity") final_gravity: Optional[float] = Field(alias="finalGravity") yeast_id: Optional[UUID] = Field(alias="yeastId") yeast: YeastModel sent_alerts: List[Optional[ProfileAlertModel]] = Field(alias="sentAlerts") class ProfileModel(RaptBaseModel): name: str description: Optional[str] public: bool profile_name: Optional[str] = Field(alias="profileName") rating: float rating_count: int = Field(alias="ratingCount") rating_score: float = Field(alias="ratingScore") copy_count: float = Field(alias="copyCount") view_count: float = Field(alias="viewCount") profile_type_id: Optional[UUID] = Field(alias="profileTypeId") alerts: Optional[List[ProfileAlertModel]] steps: Optional[List[ProfileStepModel]] profile_sessions: Optional[List[ProfileSessionModel]] = Field(alias="profileSessions") class ProfileSessionStatusModel(RaptBaseModel): name: Optional[str] description: Optional[str] profile_id: Optional[UUID] = Field(alias="profileId") profile: ProfileModel brewzilla_id: Optional[UUID] = Field(alias="brewZillaId") fermentation_chamger_id: Optional[UUID] = Field(alias="fermentationChamberId") hydrometer_id: Optional[UUID] = Field(alias="hydrometerId") still_id: Optional[UUID] = Field(alias="stillId") temperature_controller_id: Optional[UUID] = Field(alias="temperatureControllerId") start_date: Optional[datetime] = Field(alias="startDate") end_date: Optional[datetime] = Field(alias="endDate") original_gravity: Optional[float] = Field(alias="originalGravity") final_gravity: Optional[float] = Field(alias="finalGravity") yeast_id: Optional[UUID] = Field(alias="yeastId") yeast: YeastModel sent_alerts: List[Optional[ProfileAlertModel]] = Field(alias="sentAlerts") estimated_end_date: Optional[datetime] = Field(alias="estimatedEndDate") profile_length: Optional[float] = Field(alias="profileLength") current_profile_time: Optional[float] = Field(alias="currentProfileTime") remaining_profile_time: Optional[float] = Field(alias="remainingProfileTime")