From: Michael Tremer Date: Tue, 21 Jan 2025 14:47:00 +0000 (+0000) Subject: distros: Release the strong relationship to releases X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c6590b1c73b75f55177f831c0a4464b419f81433;p=pbs.git distros: Release the strong relationship to releases We don't want to fetch all releases every time we access the distribution. Signed-off-by: Michael Tremer --- diff --git a/src/buildservice/distros.py b/src/buildservice/distros.py index 57da79cd..b70b59e7 100644 --- a/src/buildservice/distros.py +++ b/src/buildservice/distros.py @@ -303,8 +303,41 @@ class Distro(database.Base, database.BackendMixin, database.SoftDeleteMixin): # Releases - releases = sqlalchemy.orm.relationship("Release", back_populates="distro", - order_by="Release.published_at", lazy="selectin") + async def get_releases(self, limit=None, offset=None): + """ + Fetches all releases of this distribution + """ + stmt = ( + sqlalchemy + .select( + releases.Release, + ) + .where( + releases.Release.deleted_at == None, + releases.Release.distro == self, + ) + .order_by( + releases.Release.published_at.desc(), + releases.Release.created_at.desc(), + ) + ) + + return await self.db.fetch_as_list(stmt) + + async def get_release(self, slug): + stmt = ( + sqlalchemy + .select( + releases.Release, + ) + .where( + releases.Release.deleted_at == None, + releases.Release.distro == self, + releases.Release.slug == slug, + ) + ) + + return await self.db.fetch_one(stmt) # Latest Release @@ -330,23 +363,6 @@ class Distro(database.Base, database.BackendMixin, database.SoftDeleteMixin): return await self.db.fetch_one(stmt) - # Releases - - def get_release(self, slug): - return self.backend.distros.releases._get_release(""" - SELECT - * - FROM - releases - WHERE - distro_id = %s - AND - slug = %s - AND - deleted_at IS NULL - """, self.id, slug, - ) - async def create_release(self, name, user, stable=False): """ Creates a new release diff --git a/src/buildservice/releases.py b/src/buildservice/releases.py index 1e410a77..92aed353 100644 --- a/src/buildservice/releases.py +++ b/src/buildservice/releases.py @@ -50,7 +50,7 @@ class Release(database.Base, database.BackendMixin, database.SoftDeleteMixin): # Distro - distro = sqlalchemy.orm.relationship("Distro", back_populates="releases", lazy="selectin") + distro = sqlalchemy.orm.relationship("Distro", lazy="selectin") # Name