Commit initial

This commit is contained in:
2026-04-15 17:57:12 +02:00
parent 005d8e797e
commit 55516ee10f
269 changed files with 26854 additions and 0 deletions
+1
View File
@@ -0,0 +1 @@
# Database package
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+36
View File
@@ -0,0 +1,36 @@
"""Peewee SQLite database instance and initialization."""
from peewee import SqliteDatabase
from imptune.config import DB_PATH
# Deferred init — path is set at runtime via init_db() so tests can override DB_PATH
db = SqliteDatabase(None)
def init_db() -> None:
"""Initialize the SQLite database with WAL mode and foreign keys.
Idempotent — safe to call on every application startup.
Creates all ORM tables if they do not already exist.
Closes any existing connection before re-initializing so that test
fixtures can monkeypatch DB_PATH between test runs.
"""
from imptune.db.models import Client, Driver, Printer, Icon
# Re-read DB_PATH each time so tests can patch imptune.config.DB_PATH
import imptune.config as cfg
# Close any lingering connection from a previous run (important for tests)
if not db.is_closed():
db.close()
db.init(
cfg.DB_PATH,
pragmas={
"journal_mode": "wal",
"foreign_keys": 1,
},
)
db.connect(reuse_if_open=True)
db.create_tables([Client, Driver, Printer, Icon], safe=True)
+82
View File
@@ -0,0 +1,82 @@
"""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"