From 6fdaeee026ecb6dd21e7ebd997d8a493f5c4b923 Mon Sep 17 00:00:00 2001 From: Kevin Morris Date: Thu, 30 Dec 2021 19:07:39 -0800 Subject: [PATCH] change(packages.util): handle queried record links via .is_official This removes an unneeded query from our path. Signed-off-by: Kevin Morris --- aurweb/models/official_provider.py | 3 +++ aurweb/models/package.py | 3 +++ aurweb/packages/util.py | 16 +++++++--------- test/test_packages_util.py | 19 ++++++++++++------- 4 files changed, 25 insertions(+), 16 deletions(-) diff --git a/aurweb/models/official_provider.py b/aurweb/models/official_provider.py index ff70fe43..e111569e 100644 --- a/aurweb/models/official_provider.py +++ b/aurweb/models/official_provider.py @@ -11,6 +11,9 @@ class OfficialProvider(Base): __tablename__ = __table__.name __mapper_args__ = {"primary_key": [__table__.c.ID]} + # OfficialProvider instances are official packages. + is_official = True + def __init__(self, **kwargs): super().__init__(**kwargs) diff --git a/aurweb/models/package.py b/aurweb/models/package.py index cfb27634..64c6a195 100644 --- a/aurweb/models/package.py +++ b/aurweb/models/package.py @@ -16,6 +16,9 @@ class Package(Base): cascade="all, delete"), foreign_keys=[__table__.c.PackageBaseID]) + # No Package instances are official packages. + is_official = False + def __init__(self, **kwargs): super().__init__(**kwargs) diff --git a/aurweb/packages/util.py b/aurweb/packages/util.py index 4c544397..9a7b48d9 100644 --- a/aurweb/packages/util.py +++ b/aurweb/packages/util.py @@ -9,7 +9,7 @@ from sqlalchemy import and_, orm from aurweb import db, l10n, models, util from aurweb.models import Package, PackageBase, User -from aurweb.models.official_provider import OFFICIAL_BASE +from aurweb.models.official_provider import OFFICIAL_BASE, OfficialProvider from aurweb.models.package_comaintainer import PackageComaintainer from aurweb.models.package_dependency import PackageDependency from aurweb.models.relation_type import PROVIDES_ID @@ -61,20 +61,18 @@ def dep_extra_desc(dep: models.PackageDependency) -> str: @register_filter("pkgname_link") def pkgname_link(pkgname: str) -> str: - base = "/".join([OFFICIAL_BASE, "packages"]) - official = db.query(models.OfficialProvider).filter( - models.OfficialProvider.Name == pkgname).exists() + official = db.query(OfficialProvider).filter( + OfficialProvider.Name == pkgname).exists() if db.query(official).scalar(): + base = "/".join([OFFICIAL_BASE, "packages"]) return f"{base}/?q={pkgname}" return f"/packages/{pkgname}" @register_filter("package_link") -def package_link(package: models.Package) -> str: - base = "/".join([OFFICIAL_BASE, "packages"]) - official = db.query(models.OfficialProvider).filter( - models.OfficialProvider.Name == package.Name).exists() - if db.query(official).scalar(): +def package_link(package: Union[Package, OfficialProvider]) -> str: + if package.is_official: + base = "/".join([OFFICIAL_BASE, "packages"]) return f"{base}/?q={package.Name}" return f"/packages/{package.Name}" diff --git a/test/test_packages_util.py b/test/test_packages_util.py index cd0982b2..0e5e896b 100644 --- a/test/test_packages_util.py +++ b/test/test_packages_util.py @@ -46,16 +46,21 @@ def client() -> TestClient: yield TestClient(app=asgi.app) -def test_package_link(client: TestClient, maintainer: User, package: Package): - with db.begin(): - db.create(OfficialProvider, - Name=package.Name, - Repo="core", - Provides=package.Name) - expected = f"{OFFICIAL_BASE}/packages/?q={package.Name}" +def test_package_link(client: TestClient, package: Package): + expected = f"/packages/{package.Name}" assert util.package_link(package) == expected +def test_official_package_link(client: TestClient, package: Package): + with db.begin(): + provider = db.create(OfficialProvider, + Name=package.Name, + Repo="core", + Provides=package.Name) + expected = f"{OFFICIAL_BASE}/packages/?q={package.Name}" + assert util.package_link(provider) == expected + + def test_updated_packages(maintainer: User, package: Package): expected = { "Name": package.Name,