Files
ad-prod/apps/stages/stages.py
2025-11-21 21:54:54 -06:00

37 lines
914 B
Python

from datetime import datetime
from typing import Any
from pydantic import BaseModel
from pydantic import PrivateAttr
from pydantic import field_serializer
class EntityState(BaseModel, extra='allow'):
state: bool = True
color_temp_kelvin: int | None = None
rgb_color: list[int] | None = None
brightness: int | None = None
@field_serializer('state')
def convert_state(self, val: Any):
if val:
return 'on'
else:
return 'off'
class Stage(BaseModel):
# start: Annotated[time, BeforeValidator(lambda v: parser(v).time())]
start: str
_start: datetime = PrivateAttr()
scene: dict[str, EntityState]
def assign_start(self, dt: datetime):
self._start = dt
def formatted_start(self, fmt: str) -> str:
return self._start.strftime(fmt)
def scene_json(self):
return self.model_dump(mode='json')['scene']