111 lines
2.8 KiB
Python
111 lines
2.8 KiB
Python
# from __future__ import annotations
|
|
from sqlmodel import Field, Relationship, SQLModel
|
|
from netbrite import Colors, Fonts, Priorities, ScrollSpeeds, Message
|
|
|
|
MAX_WIDTH = 120
|
|
MAX_HEIGHT = 7
|
|
|
|
|
|
# --- Message ---
|
|
class MessageBase(SQLModel):
|
|
text: str = ""
|
|
activation_delay: int = 0
|
|
display_delay: int = 0
|
|
display_repeat: int = 0
|
|
priority: Priorities = Priorities.OVERRIDE
|
|
sound_alarm: bool = False
|
|
ttl: int = 0
|
|
|
|
|
|
class MessageUpdate(SQLModel):
|
|
text: str | None = ""
|
|
activation_delay: int | None = 0
|
|
display_delay: int | None = 0
|
|
display_repeat: int | None = 0
|
|
priority: Priorities | None = Priorities.OVERRIDE
|
|
sound_alarm: bool = False
|
|
ttl: int | None = 0
|
|
|
|
|
|
class MessageDB(MessageBase, table=True):
|
|
id: int | None = Field(default=None, primary_key=True)
|
|
zone: "ZoneDB" = Relationship( # pyright: ignore[reportAny]
|
|
back_populates="default_message"
|
|
)
|
|
|
|
|
|
class MessagePublic(MessageBase):
|
|
id: int
|
|
|
|
|
|
# --- Device ---
|
|
class NetBriteBase(SQLModel):
|
|
address: str = Field(unique=True, index=True)
|
|
port: int = 700
|
|
|
|
|
|
class NetBriteUpdate(SQLModel):
|
|
address: str = Field(unique=True, index=True)
|
|
port: int = 700
|
|
|
|
|
|
class NetBriteDB(NetBriteBase, table=True):
|
|
id: int | None = Field(default=None, primary_key=True)
|
|
zones: list["ZoneDB"] = Relationship( # pyright: ignore[reportAny]
|
|
back_populates="netbrite"
|
|
)
|
|
|
|
|
|
class NetBritePublic(NetBriteBase):
|
|
id: int
|
|
zones: list["ZoneDB"]
|
|
active: bool
|
|
|
|
|
|
# --- Zone ---
|
|
class ZoneBase(SQLModel):
|
|
name: str
|
|
x: int = 0
|
|
y: int = 0
|
|
width: int = MAX_WIDTH
|
|
height: int = MAX_HEIGHT
|
|
scroll_speed: ScrollSpeeds = ScrollSpeeds.NORMAL
|
|
pause_duration: int = 1000
|
|
volume: int = 4
|
|
default_font: Fonts = Fonts.NORMAL_7
|
|
default_color: Colors = Colors.RED
|
|
|
|
|
|
class ZoneUpdate(SQLModel):
|
|
name: str | None = None
|
|
x: int | None = None
|
|
y: int | None = None
|
|
width: int | None = None
|
|
height: int | None = None
|
|
scroll_speed: ScrollSpeeds | None = ScrollSpeeds.NORMAL
|
|
pause_duration: int | None = 1000
|
|
volume: int | None = 4
|
|
default_font: Fonts | None = Fonts.NORMAL_7
|
|
default_color: Colors | None = Colors.RED
|
|
|
|
|
|
class ZoneDBBase(ZoneBase):
|
|
default_message_id: int | None = Field(default=None, foreign_key="messagedb.id")
|
|
netbrite_id: int = Field(default=None, foreign_key="netbritedb.id")
|
|
|
|
|
|
class ZoneDB(ZoneDBBase, table=True):
|
|
id: int | None = Field(default=None, primary_key=True)
|
|
|
|
default_message: MessageDB | None = Relationship( # pyright: ignore[reportAny]
|
|
back_populates="zone"
|
|
)
|
|
netbrite: NetBriteDB = Relationship( # pyright: ignore[reportAny]
|
|
back_populates="zones"
|
|
)
|
|
|
|
|
|
class ZonePublic(ZoneDBBase):
|
|
id: int
|
|
default_message: MessagePublic
|
|
# netbrite: NetBritePublic
|