]> git.ipfire.org Git - pbs.git/commitdiff
builds: Resolve ambiguous relationships
authorMichael Tremer <michael.tremer@ipfire.org>
Wed, 2 Jul 2025 14:30:50 +0000 (14:30 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Wed, 2 Jul 2025 14:30:50 +0000 (14:30 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/buildservice/builds.py

index ece6736fe7816d2941d6c39fdaa1123cbe99389a..ce8eced23d8be253d72e25088b98165d1423e63d 100644 (file)
@@ -354,7 +354,7 @@ class Builds(base.Object):
                return group
 
 
-class Build(sqlmodel.SQLModel, database.BackendMixin, database.SoftDeleteMixin):
+class Build(sqlmodel.SQLModel, database.BackendMixin, database.SoftDeleteMixin, table=True):
        __tablename__ = "builds"
 
        def __str__(self):
@@ -476,7 +476,9 @@ class Build(sqlmodel.SQLModel, database.BackendMixin, database.SoftDeleteMixin):
 
        # Owner
 
-       owner: "User" = sqlmodel.Relationship()
+       owner: "User" = sqlmodel.Relationship(
+               sa_relationship_kwargs={ "foreign_keys" : "[Build.owner_id]" },
+       )
 
        # Is this a scratch build?
 
@@ -511,7 +513,9 @@ class Build(sqlmodel.SQLModel, database.BackendMixin, database.SoftDeleteMixin):
 
        # Group
 
-       group: "BuildGroup" = sqlmodel.Relationship(back_populates="builds")
+       group: "BuildGroup" = sqlmodel.Relationship(back_populates="builds",
+               sa_relationship_kwargs={ "foreign_keys" : "[Build.group_id]" },
+       )
 
        # Severity
 
@@ -639,19 +643,19 @@ class Build(sqlmodel.SQLModel, database.BackendMixin, database.SoftDeleteMixin):
                # Notify
                await comment.notify()
 
-       #comments = sqlalchemy.orm.relationship(
-       #       "BuildComment", back_populates="build", lazy="selectin",
-       #)
+       # Comments
+
+       comments: "BuildComment" = sqlmodel.Relationship(back_populates="build")
 
        # Deleted By ID
 
-       #deleted_by_id = Column(Integer, ForeignKey("users.id"))
+       deleted_by_id: int = sqlmodel.Field(foreign_key="users.id", exclude=True)
 
        # Deleted By
 
-       #deleted_by = sqlalchemy.orm.relationship(
-       #       "User", foreign_keys=[deleted_by_id], lazy="selectin",
-       #)
+       deleted_by: "User" = sqlmodel.Relationship(
+               sa_relationship_kwargs={ "foreign_keys" : "[Build.deleted_by_id]" },
+       )
 
        # Add Points
 
@@ -669,10 +673,12 @@ class Build(sqlmodel.SQLModel, database.BackendMixin, database.SoftDeleteMixin):
 
        # Points
 
-       points : int = sqlmodel.Field(default=0)
+       points: int = sqlmodel.Field(default=0)
 
        ## Watchers
 
+       watchers: "BuildWatcher" = sqlmodel.Relationship()
+
        async def get_watchers(self):
                stmt = (
                        sqlalchemy
@@ -1345,15 +1351,19 @@ class BuildGroup(sqlmodel.SQLModel, database.SoftDeleteMixin, table=True):
 
        # Created By
 
-       created_by: "User" = sqlmodel.Relationship()
+       created_by: "User" = sqlmodel.Relationship(
+               sa_relationship_kwargs={ "foreign_keys" : "[BuildGroup.created_by_id]" },
+       )
 
        # Deleted By ID
 
-       #deleted_by_id: int = sqlmodel.Field(foreign_key="users.id")
+       deleted_by_id: int = sqlmodel.Field(foreign_key="users.id")
 
        # Deleted By
 
-       #deleted_by: "User" = sqlmodel.Relationship()
+       deleted_by: "User" = sqlmodel.Relationship(
+               sa_relationship_kwargs={ "foreign_keys" : "[BuildGroup.created_by_id]" },
+       )
 
        # Finished At
 
@@ -1365,7 +1375,8 @@ class BuildGroup(sqlmodel.SQLModel, database.SoftDeleteMixin, table=True):
 
        # Builds
 
-       builds: "Build" = sqlmodel.Relationship(back_populates="group")
+       builds: "Build" = sqlmodel.Relationship(back_populates="group",
+               sa_relationship_kwargs={ "foreign_keys" : "[Build.group_id]" })
 
        @staticmethod
        def _sort_builds(build):
@@ -1401,7 +1412,9 @@ class BuildGroup(sqlmodel.SQLModel, database.SoftDeleteMixin, table=True):
 
        # Tested Build
 
-       tested_build: "Build" = sqlmodel.Relationship()
+       tested_build: "Build" = sqlmodel.Relationship(
+               sa_relationship_kwargs={ "foreign_keys" : "[BuildGroup.tested_build_id]" },
+       )
 
        # Test?
 
@@ -1617,7 +1630,7 @@ class BuildPoint(sqlmodel.SQLModel, database.BackendMixin, table=True):
 
        # Build
 
-       build: "Build" = sqlmodel.Relationship(back_populates="comments")
+       build: "Build" = sqlmodel.Relationship()
 
        # Created At
 
@@ -1657,7 +1670,7 @@ class BuildWatcher(sqlmodel.SQLModel, database.BackendMixin, database.SoftDelete
 
        # Build
 
-       build: "Build" = sqlmodel.Relationship(back_populates="comments")
+       build: "Build" = sqlmodel.Relationship(back_populates="watchers")
 
        # User ID