diff --git a/app/templates/navbar.html b/app/templates/navbar.html index c32c0b8..9b7719d 100644 --- a/app/templates/navbar.html +++ b/app/templates/navbar.html @@ -7,6 +7,9 @@ + diff --git a/app/templates/packages.html b/app/templates/packages.html new file mode 100644 index 0000000..135abfe --- /dev/null +++ b/app/templates/packages.html @@ -0,0 +1,32 @@ +{% extends "layout.html" %} +{% block title %}Packages{% endblock %} +{% block inner_content %} + +
+
+

Packages

+
{{ packages|length }} packages
+
+
+ + + + + + + + + + {% for s, p in packages %} + + + + + + {% endfor %} + +
PackageVersionDescription
{{ package_name(p) }}{{ p.version }}{{ p.desc }}
+
+
+ +{% endblock %} diff --git a/app/web.py b/app/web.py index 871a8e5..1f805e9 100644 --- a/app/web.py +++ b/app/web.py @@ -165,22 +165,29 @@ async def group(request: Request, response: Response, group_name: Optional[str] }, headers=dict(response.headers)) +@router.get('/package/', dependencies=[Depends(Etag(get_etag))]) @router.get('/package/{package_name}', dependencies=[Depends(Etag(get_etag))]) -async def package(request: Request, response: Response, package_name: str, repo: Optional[str] = None, variant: Optional[str] = None) -> Response: +async def package(request: Request, response: Response, package_name: Optional[str] = None, repo: Optional[str] = None, variant: Optional[str] = None) -> Response: global state packages = [] for s in state.sources: for k, p in sorted(s.packages.items()): - if p.name == package_name or package_name in p.provides: + if package_name is None or p.name == package_name or package_name in p.provides: if not repo or p.repo == repo: if not variant or p.repo_variant == variant: packages.append((s, p)) - return templates.TemplateResponse("package.html", { - "request": request, - "packages": packages, - }, headers=dict(response.headers)) + if package_name is not None: + return templates.TemplateResponse("package.html", { + "request": request, + "packages": packages, + }, headers=dict(response.headers)) + else: + return templates.TemplateResponse("packages.html", { + "request": request, + "packages": packages, + }, headers=dict(response.headers)) @router.get('/updates', dependencies=[Depends(Etag(get_etag))]) diff --git a/tests/test_main.py b/tests/test_main.py index d3b8fca..64b85f9 100644 --- a/tests/test_main.py +++ b/tests/test_main.py @@ -22,6 +22,7 @@ def client(): @pytest.mark.parametrize("endpoint", [ '', 'repos', 'base', 'group', 'updates', 'outofdate', 'queue', 'new', 'removals', 'search', 'base/foo', 'group/foo', 'package/foo', 'python2', + 'package', ]) def test_main_endpoints(client, endpoint): r = client.get('/' + endpoint)