Files
ImpTune/imptune/db/models.py
T
2026-04-15 17:57:12 +02:00

83 lines
2.0 KiB
Python

"""Peewee ORM models — full schema for phases 1-5."""
from datetime import UTC, datetime
def _utcnow():
return datetime.now(UTC).replace(tzinfo=None)
from peewee import (
BooleanField,
CharField,
DateTimeField,
ForeignKeyField,
IntegerField,
Model,
)
from imptune.db.database import db
class BaseModel(Model):
"""Base model that binds all models to the shared db instance."""
class Meta:
database = db
class Client(BaseModel):
"""Represents a deployment target (AD client / OU)."""
name = CharField(unique=True)
created_at = DateTimeField(default=_utcnow)
class Meta:
table_name = "client"
class Driver(BaseModel):
"""Uploaded printer driver package (content-addressed by SHA256)."""
sha256 = CharField(unique=True, index=True)
original_filename = CharField()
size_bytes = IntegerField()
uploaded_at = DateTimeField(default=_utcnow)
driver_desc = CharField(null=True)
inf_filename = CharField(null=True)
architecture = CharField(null=True)
has_cat_file = BooleanField(default=False)
class Meta:
table_name = "driver"
class Printer(BaseModel):
"""Printer configuration record."""
name = CharField()
ip_address = CharField()
port_name = CharField()
client = ForeignKeyField(Client, null=True, backref="printers")
driver = ForeignKeyField(Driver, null=True, backref="printers")
duplex_mode = CharField(default="OneSided")
color_mode = BooleanField(default=True)
paper_size = CharField(default="A4")
collate = BooleanField(default=True)
created_at = DateTimeField(default=_utcnow)
updated_at = DateTimeField(default=_utcnow)
class Meta:
table_name = "printer"
class Icon(BaseModel):
"""Printer icon image (one per printer)."""
printer = ForeignKeyField(Printer, unique=True, backref="icons")
sha256 = CharField()
original_filename = CharField()
size_bytes = IntegerField()
uploaded_at = DateTimeField(default=_utcnow)
class Meta:
table_name = "icon"