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 @@
Base Packages
+
+ Packages
+
Groups
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 %}
+
+
+
+
+
+
+
+ | Package |
+ Version |
+ Description |
+
+
+
+ {% for s, p in packages %}
+
+ | {{ package_name(p) }} |
+ {{ p.version }} |
+ {{ p.desc }} |
+
+ {% endfor %}
+
+
+
+
+
+{% 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)