Add a package index
This commit is contained in:
@@ -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>
|
||||
|
||||
32
app/templates/packages.html
Normal file
32
app/templates/packages.html
Normal 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 %}
|
||||
19
app/web.py
19
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))])
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user