36 lines
832 B
Python
36 lines
832 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):
|
|
state: bool = True
|
|
color_temp_kelvin: int
|
|
brightness: int
|
|
|
|
@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']
|