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"]], )