Update palettes, profiles, tabs, preset sending, and ESPNow message format to match the new preset defaults and driver short-field schema.
46 lines
1.3 KiB
Python
46 lines
1.3 KiB
Python
from models.model import Model
|
|
|
|
class Palette(Model):
|
|
def __init__(self):
|
|
super().__init__()
|
|
|
|
def create(self, name="", colors=None):
|
|
next_id = self.get_next_id()
|
|
# Store palette as a simple list of colors; name is ignored.
|
|
self[next_id] = list(colors) if colors else []
|
|
self.save()
|
|
return next_id
|
|
|
|
def read(self, id):
|
|
id_str = str(id)
|
|
value = self.get(id_str, None)
|
|
# Backwards compatibility: if stored as {"colors": [...]}, unwrap.
|
|
if isinstance(value, dict) and "colors" in value:
|
|
return value.get("colors") or []
|
|
# Otherwise, expect a list of colors.
|
|
return value or []
|
|
|
|
def update(self, id, data):
|
|
id_str = str(id)
|
|
if id_str not in self:
|
|
return False
|
|
# Accept either {"colors": [...]} or a raw list.
|
|
if isinstance(data, dict):
|
|
colors = data.get("colors", [])
|
|
else:
|
|
colors = data
|
|
self[id_str] = list(colors) if colors else []
|
|
self.save()
|
|
return True
|
|
|
|
def delete(self, id):
|
|
id_str = str(id)
|
|
if id_str not in self:
|
|
return False
|
|
self.pop(id_str)
|
|
self.save()
|
|
return True
|
|
|
|
def list(self):
|
|
return list(self.keys())
|