base: add option to filter by repo
mostly useful to show only cygwin packages for example
This commit is contained in:
parent
bf40a8d007
commit
b4dd495b8d
@ -8,6 +8,24 @@
|
||||
<h6 class="card-subtitle mb-2 text-muted">{{ sources|length }} base packages</h6>
|
||||
</div>
|
||||
<div class="card-body overflow-auto">
|
||||
|
||||
<form class="row g-2 align-items-center" action="{{ url_for('baseindex') }}" method="get">
|
||||
<div class="col-auto">
|
||||
Repository:
|
||||
</div>
|
||||
|
||||
<div class="col-auto">
|
||||
<select name="repo" class="form-select form-select-sm" onchange="this.form.submit()">
|
||||
<option {{ "selected" if not repo_filter or "" }} value="">All</option>
|
||||
{% for r in repos %}
|
||||
<option value="{{ r.name }}" {{ "selected" if repo_filter == r.name or "" }}>{{ r.name }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<br>
|
||||
|
||||
<table class="table table-hover table-sm" style="table-layout: fixed; width:100%;">
|
||||
<colgroup>
|
||||
<col style="width: 25%">
|
||||
|
||||
@ -12,7 +12,7 @@
|
||||
<a class="nav-link {{ 'active' if is_endpoint('repos') else '' }}" href="{{ url_for('repos') }}">Repos</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link {{ 'active' if is_endpoint('base') else '' }}" href="{{ url_for('base') }}">Base Packages</a>
|
||||
<a class="nav-link {{ 'active' if is_endpoint('base') else '' }}" href="{{ url_for('baseindex') }}">Base Packages</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link {{ 'active' if is_endpoint('packages') else '' }}" href="{{ url_for('packages') }}">Packages</a>
|
||||
|
||||
45
app/web.py
45
app/web.py
@ -237,22 +237,41 @@ async def index(request: Request, response: Response) -> Response:
|
||||
|
||||
|
||||
@router.get('/base', dependencies=[Depends(Etag(get_etag))])
|
||||
@router.get('/base/{base_name}', dependencies=[Depends(Etag(get_etag))])
|
||||
async def base(request: Request, response: Response, base_name: str | None = None) -> Response:
|
||||
async def baseindex(request: Request, response: Response, repo: str | None = None) -> Response:
|
||||
global state
|
||||
|
||||
if base_name is not None:
|
||||
if base_name in state.sources:
|
||||
res = [state.sources[base_name]]
|
||||
else:
|
||||
res = []
|
||||
return templates.TemplateResponse(request, "base.html", {
|
||||
"sources": res,
|
||||
}, status_code=200 if res else 404, headers=dict(response.headers))
|
||||
repo_filter = repo or None
|
||||
repos = get_repositories()
|
||||
|
||||
filtered: list[Source] = []
|
||||
if repo_filter is None:
|
||||
filtered = list(state.sources.values())
|
||||
else:
|
||||
return templates.TemplateResponse(request, "baseindex.html", {
|
||||
"sources": state.sources.values(),
|
||||
}, headers=dict(response.headers))
|
||||
for s in state.sources.values():
|
||||
for p in s.packages.values():
|
||||
if p.repo == repo_filter:
|
||||
filtered.append(s)
|
||||
break
|
||||
|
||||
return templates.TemplateResponse(request, "baseindex.html", {
|
||||
"sources": filtered,
|
||||
"repos": repos,
|
||||
"repo_filter": repo_filter,
|
||||
}, headers=dict(response.headers))
|
||||
|
||||
|
||||
@router.get('/base/{base_name}', dependencies=[Depends(Etag(get_etag))])
|
||||
async def base(request: Request, response: Response, base_name: str) -> Response:
|
||||
global state
|
||||
|
||||
|
||||
if base_name in state.sources:
|
||||
res = [state.sources[base_name]]
|
||||
else:
|
||||
res = []
|
||||
return templates.TemplateResponse(request, "base.html", {
|
||||
"sources": res,
|
||||
}, status_code=200 if res else 404, headers=dict(response.headers))
|
||||
|
||||
|
||||
@router.get('/security', dependencies=[Depends(Etag(get_etag))])
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user