add /pkgbase/{name} route

Signed-off-by: Kevin Morris <kevr@0cost.org>
This commit is contained in:
Kevin Morris 2021-07-15 22:54:41 -07:00
parent ae3d302c47
commit 88569b6d09
4 changed files with 88 additions and 0 deletions

View file

@ -96,3 +96,20 @@ async def package(request: Request, name: str) -> Response:
context["conflicts"] = conflicts context["conflicts"] = conflicts
return render_template(request, "packages/show.html", context) return render_template(request, "packages/show.html", context)
@router.get("/pkgbase/{name}")
async def package_base(request: Request, name: str) -> Response:
# Get the PackageBase.
pkgbase = get_pkgbase(name)
# If this is not a split package, redirect to /packages/{name}.
if pkgbase.packages.count() == 1:
return RedirectResponse(f"/packages/{name}",
status_code=int(HTTPStatus.SEE_OTHER))
# Add our base information.
context = await make_single_context(request, pkgbase)
context["packages"] = pkgbase.packages.all() # Doesn't need to be here.
return render_template(request, "pkgbase.html", context)

View file

@ -0,0 +1,13 @@
<div id="pkgs" class="listing">
<h3>Packages ({{ packages_count }})</h3>
<ul>
{% for result in packages %}
<li>
<a href="/packages/{{ result.Name }}/"
title="{{ 'View packages details for' | tr }} {{ result.Name }}">
{{ result.Name }}
</a>
</li>
{% endfor %}
</ul>
</div>

21
templates/pkgbase.html Normal file
View file

@ -0,0 +1,21 @@
{% extends "partials/layout.html" %}
{% block pageContent %}
{% include "partials/packages/search.html" %}
<div id="pkgdetails" class="box">
<h2>{{ 'Package Base Details' | tr }}: {{ pkgbase.Name }}</h2>
{% set result = pkgbase %}
{% include "partials/packages/actions.html" %}
{% include "partials/packages/details.html" %}
<div id="metadata">
{% include "partials/packages/pkgbase_metadata.html" %}
</div>
</div>
{% set pkgname = result.Name %}
{% set pkgbase_id = result.ID %}
{% set comments = comments %}
{% include "partials/packages/comments.html" %}
{% endblock %}

View file

@ -281,3 +281,40 @@ def test_package_dependencies(client: TestClient, maintainer: User,
broken_node = root.find('.//ul[@id="pkgdepslist"]/li/span') broken_node = root.find('.//ul[@id="pkgdepslist"]/li/span')
assert broken_node.text.strip() == broken_dep.DepName assert broken_node.text.strip() == broken_dep.DepName
def test_pkgbase_not_found(client: TestClient):
with client as request:
resp = request.get("/pkgbase/not_found")
assert resp.status_code == int(HTTPStatus.NOT_FOUND)
def test_pkgbase_redirect(client: TestClient, package: Package):
with client as request:
resp = request.get(f"/pkgbase/{package.Name}",
allow_redirects=False)
assert resp.status_code == int(HTTPStatus.SEE_OTHER)
assert resp.headers.get("location") == f"/packages/{package.Name}"
def test_pkgbase(client: TestClient, package: Package):
second = db.create(Package, Name="second-pkg",
PackageBase=package.PackageBase)
expected = [package.Name, second.Name]
with client as request:
resp = request.get(f"/pkgbase/{package.Name}",
allow_redirects=False)
assert resp.status_code == int(HTTPStatus.OK)
root = parse_root(resp.text)
# Check the details box title.
title = root.find('.//div[@id="pkgdetails"]/h2')
title, pkgname = title.text.split(": ")
assert title == "Package Base Details"
assert pkgname == package.Name
pkgs = root.findall('.//div[@id="pkgs"]/ul/li/a')
for i, name in enumerate(expected):
assert pkgs[i].text.strip() == name