]> git.ipfire.org Git - pbs.git/commitdiff
packages: Don't fetch all builds all of the time
authorMichael Tremer <michael.tremer@ipfire.org>
Wed, 22 Jan 2025 13:51:06 +0000 (13:51 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Wed, 22 Jan 2025 13:51:06 +0000 (13:51 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/buildservice/builds.py
src/buildservice/packages.py

index 496ada8a85e9e717f4ac0fa3bcf8ca4a017fb161..57688a80533fbf4e9b6088e6a312c5d9412161fa 100644 (file)
@@ -415,8 +415,7 @@ class Build(database.Base, database.BackendMixin, database.SoftDeleteMixin):
 
        # Package
 
-       pkg = sqlalchemy.orm.relationship("Package",
-               foreign_keys=[pkg_id], back_populates="builds", lazy="selectin")
+       pkg = sqlalchemy.orm.relationship("Package", foreign_keys=[pkg_id], lazy="selectin")
 
        @property
        def name(self):
index 33fc34680ac15b69e4253f3df1d407e6357d8d0d..ea5f78cc6afa19278f54cd143f750b17624ea836 100644 (file)
@@ -283,10 +283,6 @@ class Package(database.Base, database.BackendMixin, database.SoftDeleteMixin):
 
        uuid = Column(UUID, nullable=False)
 
-       # Build
-
-       builds = sqlalchemy.orm.relationship("Build", back_populates="pkg", lazy="selectin")
-
        # Created At
 
        created_at = Column(
@@ -506,23 +502,24 @@ class Package(database.Base, database.BackendMixin, database.SoftDeleteMixin):
                        } for file in filelist),
                )
 
-       @lazy_property
-       async def XXXbuilds(self):
-               builds = await self.backend.builds._get_builds("""
-                       SELECT
-                               *
-                       FROM
-                               builds
-                       WHERE
-                               deleted_at IS NULL
-                       AND
-                               pkg_id = %s
-                       ORDER BY
-                               created_at DESC""",
-                       self.id,
+       async def get_builds(self, limit=None, offset=None):
+               stmt = (
+                       sqlalchemy
+                       .select(
+                               builds.Build,
+                       )
+                       .where(
+                               builds.Build.deleted_at == None,
+                               builds.Build.pkg == self,
+                       )
+                       .order_by(
+                               builds.Build.created_at.desc(),
+                       )
+                       .limit(limit)
+                       .offset(offset)
                )
 
-               return list(builds)
+               return await self.db.fetch_as_list(stmt)
 
        @lazy_property
        def job(self):