Implemented basic device controls
This commit is contained in:
parent
aca30088b0
commit
aefa4275d4
2 changed files with 214 additions and 132 deletions
113
db.py
113
db.py
|
@ -1,65 +1,78 @@
|
|||
from sqlmodel import Field, Session, SQLModel, create_engine, select
|
||||
|
||||
from netbrite import Colors, Fonts, Message, Priorities, ScrollSpeeds
|
||||
# from __future__ import annotations
|
||||
from sqlmodel import Field, Relationship, SQLModel
|
||||
from netbrite import Colors, Fonts, Priorities, ScrollSpeeds, Message
|
||||
|
||||
|
||||
class BaseZone(SQLModel, table=True, echo=True):
|
||||
# --- Message ---
|
||||
class MessageBase(SQLModel):
|
||||
activation_delay: int = 0
|
||||
display_delay: int = 0
|
||||
display_repeat: int = 0
|
||||
priority: Priorities = Priorities.OVERRIDE
|
||||
text: str = ""
|
||||
ttl: int = 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
|
||||
zone: "ZoneDB"
|
||||
|
||||
|
||||
# --- Device ---
|
||||
class NetBriteBase(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
|
||||
y: int
|
||||
width: int
|
||||
height: int
|
||||
scroll_speed: ScrollSpeeds
|
||||
pause_duration: int
|
||||
volume: int
|
||||
default_font: Fonts
|
||||
default_color: Colors
|
||||
scroll_speed: ScrollSpeeds = ScrollSpeeds.NORMAL
|
||||
pause_duration: int = 1000
|
||||
volume: int = 4
|
||||
default_font: Fonts = Fonts.NORMAL_7
|
||||
default_color: Colors = Colors.RED
|
||||
|
||||
default_message: int | None = Field(foreign_key="apimessages.id")
|
||||
netbrite_device_id: int = Field(foreign_key="apinetbritedevice.id")
|
||||
default_message_id: int | None = Field(default=None, foreign_key="messagedb.id")
|
||||
netbrite_id: int = Field(default=None, foreign_key="netbritedb.id")
|
||||
|
||||
|
||||
class APIGetZone(SQLModel, table=True, echo=True):
|
||||
class ZoneDB(ZoneBase, table=True):
|
||||
id: int | None = Field(default=None, primary_key=True)
|
||||
|
||||
x: int
|
||||
y: int
|
||||
width: int
|
||||
height: int
|
||||
scroll_speed: ScrollSpeeds
|
||||
pause_duration: int
|
||||
volume: int
|
||||
default_font: Fonts
|
||||
default_color: Colors
|
||||
|
||||
default_message: Message | None
|
||||
default_message: MessageDB | None = Relationship( # pyright: ignore[reportAny]
|
||||
back_populates="zone"
|
||||
)
|
||||
netbrite: NetBriteDB = Relationship( # pyright: ignore[reportAny]
|
||||
back_populates="zones"
|
||||
)
|
||||
|
||||
|
||||
class APIMessages(SQLModel, table=True, echo=True):
|
||||
id: int | None = Field(default=None, primary_key=True)
|
||||
|
||||
activation_delay: int
|
||||
display_delay: int
|
||||
display_repeat: int
|
||||
priority: Priorities
|
||||
text: str
|
||||
ttl: int
|
||||
|
||||
|
||||
class BaseNetBriteDevice(SQLModel, table=True, echo=True):
|
||||
id: int | None = Field(default=None, primary_key=True)
|
||||
address: str = Field(unique=True)
|
||||
port: int = 700
|
||||
|
||||
|
||||
class APIAddNetBriteDevice(SQLModel, table=False):
|
||||
address: str
|
||||
port: int = 700
|
||||
|
||||
|
||||
class APIGetNetBriteDevice(SQLModel, table=False):
|
||||
address: str
|
||||
port: int = 700
|
||||
connected: bool
|
||||
zones: dict[str, APIGetZone]
|
||||
class ZonePublic(ZoneBase):
|
||||
id: int
|
||||
default_message: MessagePublic
|
||||
netbrite: NetBritePublic
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue