fix(FastAPI): get_pkgbase -> get_pkg_or_base

`get_pkgbase` has been replaced with `get_pkg_or_base`, which is
quite similar, but it does take a new `cls` keyword argument which
is to be the model class which we search for via its `Name` column.

Additionally, this change fixes a bug in the `/packages/{name}` route
by supplying the Package object in question to the context and modifying
the template to use it instead of a hacky through-base workaround.

Examples:

    pkgbase = get_pkg_or_base("some_pkgbase_name", PackageBase)
    pkg = get_pkg_or_base("some_package_name", Package)

Signed-off-by: Kevin Morris <kevr@0cost.org>
This commit is contained in:
Kevin Morris 2021-09-27 14:58:07 -07:00
parent f849e8b696
commit 5e95cfbc8a
No known key found for this signature in database
GPG key ID: F7E46DED420788F3
3 changed files with 19 additions and 16 deletions

View file

@ -23,7 +23,7 @@ from aurweb.models.package_source import PackageSource
from aurweb.models.package_vote import PackageVote
from aurweb.models.relation_type import CONFLICTS_ID
from aurweb.packages.search import PackageSearch
from aurweb.packages.util import get_pkgbase, query_notified, query_voted
from aurweb.packages.util import get_pkg_or_base, query_notified, query_voted
from aurweb.templates import make_context, render_template
router = APIRouter()
@ -143,11 +143,14 @@ async def make_single_context(request: Request,
@router.get("/packages/{name}")
async def package(request: Request, name: str) -> Response:
# Get the PackageBase.
pkgbase = get_pkgbase(name)
# Get the Package.
pkg = get_pkg_or_base(name, Package)
pkgbase = (get_pkg_or_base(name, PackageBase)
if not pkg else pkg.PackageBase)
# Add our base information.
context = await make_single_context(request, pkgbase)
context["package"] = pkg
# Package sources.
context["sources"] = db.query(PackageSource).join(Package).join(
@ -181,7 +184,7 @@ async def package(request: Request, name: str) -> Response:
@router.get("/pkgbase/{name}")
async def package_base(request: Request, name: str) -> Response:
# Get the PackageBase.
pkgbase = get_pkgbase(name)
pkgbase = get_pkg_or_base(name, PackageBase)
# If this is not a split package, redirect to /packages/{name}.
if pkgbase.packages.count() == 1: