flickerstrip-py/flickerstrip_py/models/status.py

79 lines
2.0 KiB
Python

from dataclasses import dataclass
from typing import Any
from . import memory, pattern
@dataclass
class Status:
"""
Represents the status of a flickerstrip.
"""
ap: int
name: str
group: str
firmware: str
power: bool
mac: str
selectedPattern: int
brightness: int
length: int
start: int
end: int
fade: int
isReversed: bool
cycle: int
uptime: int
memory: memory.Usage
patterns: list[pattern.Pattern]
def to_json(self) -> Any:
"""
Converts the status to a JSON object.
"""
return {
"ap": self.ap,
"name": self.name,
"group": self.group,
"firmware": self.firmware,
"power": self.power,
"mac": self.mac,
"selectedPattern": self.selectedPattern,
"brightness": self.brightness,
"length": self.length,
"start": self.start,
"end": self.end,
"fade": self.fade,
"isReversed": self.isReversed,
"cycle": self.cycle,
"uptime": self.uptime,
"memory": self.memory.to_json(),
"patterns": [p.to_json() for p in self.patterns],
}
@classmethod
def from_json(cls, data: Any) -> "Status":
"""
Creates a Status from a JSON object.
"""
return cls(
ap=data["ap"],
name=data["name"],
group=data["group"],
firmware=data["firmware"],
power=data["power"],
mac=data["mac"],
selectedPattern=data["selectedPattern"],
brightness=data["brightness"],
length=data["length"],
start=data["start"],
end=data["end"],
fade=data["fade"],
isReversed=data["isReversed"],
cycle=data["cycle"],
uptime=data["uptime"],
memory=memory.Usage.from_json(data["memory"]),
patterns=[pattern.Pattern.from_json(p) for p in data["patterns"]],
)