Add a package index

This commit is contained in:
Christoph Reiter
2020-07-05 12:53:32 +02:00
parent f75c2f9211
commit b9f40d85cf
4 changed files with 49 additions and 6 deletions

View File

@@ -7,6 +7,9 @@
<li class="nav-item">
<a class="nav-link {{ 'active' if is_endpoint('base') else '' }}" href="{{ url_for('base') }}">Base Packages</a>
</li>
<li class="nav-item">
<a class="nav-link {{ 'active' if is_endpoint('package') else '' }}" href="{{ url_for('package') }}">Packages</a>
</li>
<li class="nav-item">
<a class="nav-link {{ 'active' if is_endpoint('group') else '' }}" href="{{ url_for('group') }}">Groups</a>
</li>

View File

@@ -0,0 +1,32 @@
{% extends "layout.html" %}
{% block title %}Packages{% endblock %}
{% block inner_content %}
<div class="card mb-3">
<div class="card-header">
<h4 class="card-title">Packages</h4>
<h6 class="card-subtitle mb-2 text-muted">{{ packages|length }} packages</h6>
</div>
<div class="card-body overflow-auto">
<table class="table table-hover table-sm">
<thead>
<tr>
<th>Package</th>
<th>Version</th>
<th>Description</th>
</tr>
</thead>
<tbody>
{% for s, p in packages %}
<tr>
<td><a href="{{ package_url(p) }}">{{ package_name(p) }}</a></td>
<td>{{ p.version }}</td>
<td>{{ p.desc }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
{% endblock %}

View File

@@ -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))])

View File

@@ -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)