From: Michael Tremer Date: Wed, 2 Jul 2025 14:30:50 +0000 (+0000) Subject: builds: Resolve ambiguous relationships X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6a9e432e38cb885bcfdceca2c3ee7e1683c360c2;p=pbs.git builds: Resolve ambiguous relationships Signed-off-by: Michael Tremer --- diff --git a/src/buildservice/builds.py b/src/buildservice/builds.py index ece6736f..ce8eced2 100644 --- a/src/buildservice/builds.py +++ b/src/buildservice/builds.py @@ -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