]> git.ipfire.org Git - pbs.git/commitdiff
repos: Migrate the Repo <-> Build mapping to SQLModel
authorMichael Tremer <michael.tremer@ipfire.org>
Wed, 2 Jul 2025 15:01:01 +0000 (15:01 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Wed, 2 Jul 2025 15:01:01 +0000 (15:01 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/buildservice/repos.py

index 15a1798d8ef5c2ad52befa3e8dbd7f5bf77397f2..86c2b9d64f69b75bb9c408ec0ea70047bd16af86 100644 (file)
@@ -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!