From: Michael Tremer Date: Wed, 2 Jul 2025 15:01:01 +0000 (+0000) Subject: repos: Migrate the Repo <-> Build mapping to SQLModel X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4051db3f311171b09631df506394ec463e72938c;p=pbs.git repos: Migrate the Repo <-> Build mapping to SQLModel Signed-off-by: Michael Tremer --- diff --git a/src/buildservice/repos.py b/src/buildservice/repos.py index 15a1798d..86c2b9d6 100644 --- a/src/buildservice/repos.py +++ b/src/buildservice/repos.py @@ -12,9 +12,6 @@ import shutil import sqlalchemy import sqlmodel -from sqlalchemy import Column, ForeignKey -from sqlalchemy import Boolean, DateTime, Integer, Text - from . import base from . import builds from . import database @@ -29,58 +26,67 @@ from .decorators import * # Setup logging log = logging.getLogger("pbs.repositories") -class RepoBuild(database.Base): +class RepoBuild(sqlmodel.SQLModel, table=True): __tablename__ = "repository_builds" # ID - id = Column(Integer, primary_key=True) + id: int = sqlmodel.Field(primary_key=True, exclude=True) # Repo ID - repo_id = Column(Integer, ForeignKey("repositories.id"), nullable=False) + repo_id: int = sqlmodel.Field(foreign_key="repositories.id", exclude=True) # Repo - repo = sqlalchemy.orm.relationship("Repo", foreign_keys=[repo_id], - lazy="joined", innerjoin=True) + repo: "Repo" = sqlmodel.Relationship( + sa_relationship_kwargs={ "lazy" : "selectin" }, + ) # Build ID - build_id = Column(Integer, ForeignKey("builds.id"), nullable=False) + build_id: int = sqlmodel.Field(foreign_key="builds.id", exclude=True) # Build - build = sqlalchemy.orm.relationship("Build", foreign_keys=[build_id], - lazy="joined", innerjoin=True) + build: "Build" = sqlmodel.Relationship( + sa_relationship_kwargs={ "lazy" : "joined", "innerjoin" : True }, + ) # Added At - added_at = Column(DateTime(timezone=False), nullable=False, - default=sqlalchemy.func.current_timestamp()) + added_at: datetime.datetime = sqlmodel.Field( + sa_column_kwargs = {"server_default" : sqlalchemy.text("CURRENT_TIMESTAMP")} + ) # Added By ID - added_by_id = Column(Integer, ForeignKey("users.id"), nullable=False) + added_by_id: int = sqlmodel.Field(foreign_key="users.id", exclude=True) # Added By - added_by = sqlalchemy.orm.relationship( - "User", foreign_keys=[added_by_id], lazy="selectin", + added_by: "User" = sqlmodel.Relationship( + sa_relationship_kwargs={ + "foreign_keys" : "[RepoBuild.added_by_id]", + "lazy" : "selectin", + }, ) # Removed At - removed_at = Column(DateTime(timezone=False)) + removed_at: datetime.datetime | None = None # Removed By ID - removed_by_id = Column(Integer, ForeignKey("users.id")) + removed_by_id: int = sqlmodel.Field(foreign_key="users.id", exclude=True) # Removed By - removed_by = sqlalchemy.orm.relationship( - "User", foreign_keys=[removed_by_id], lazy="selectin", + removed_by: "User" = sqlmodel.Relationship( + sa_relationship_kwargs={ + "foreign_keys" : "[RepoBuild.removed_by_id]", + "lazy" : "selectin", + }, ) # Remove!