generated from coulomb/repo-seed
search filters and inspection polish
This commit is contained in:
@@ -176,9 +176,21 @@ def repository_index(service: RegistryService = Depends(get_service)) -> HTMLRes
|
||||
@router.get("/ui/search")
|
||||
def search_page(
|
||||
q: str = "",
|
||||
status: str = "",
|
||||
language: str = "",
|
||||
framework: str = "",
|
||||
service: RegistryService = Depends(get_service),
|
||||
) -> HTMLResponse:
|
||||
results = service.search(q) if q.strip() else []
|
||||
results = (
|
||||
service.search(
|
||||
q,
|
||||
status=status or None,
|
||||
language=language or None,
|
||||
framework=framework or None,
|
||||
)
|
||||
if q.strip()
|
||||
else []
|
||||
)
|
||||
rows = "\n".join(
|
||||
f"""
|
||||
<tr>
|
||||
@@ -205,9 +217,17 @@ def search_page(
|
||||
<a class="button secondary" href="/ui">Repositories</a>
|
||||
</div>
|
||||
<section class="panel">
|
||||
<form class="actions" method="get" action="/ui/search">
|
||||
<form class="stack" method="get" action="/ui/search">
|
||||
<input name="q" value="{escape(q)}" placeholder="Search approved registry entries">
|
||||
<button type="submit">Search</button>
|
||||
<div class="grid">
|
||||
<label>Status <input name="status" value="{escape(status)}" placeholder="indexed"></label>
|
||||
<label>Language <input name="language" value="{escape(language)}" placeholder="Python"></label>
|
||||
<label>Framework <input name="framework" value="{escape(framework)}" placeholder="FastAPI"></label>
|
||||
</div>
|
||||
<div class="actions">
|
||||
<button type="submit">Search</button>
|
||||
<a class="button secondary" href="/ui/search">Clear</a>
|
||||
</div>
|
||||
</form>
|
||||
</section>
|
||||
<section class="panel" style="margin-top:18px">
|
||||
@@ -241,6 +261,9 @@ def repository_detail(
|
||||
repository = service.get_repository(repository_id)
|
||||
runs = service.list_analysis_runs(repository_id)
|
||||
ability_map = service.ability_map(repository_id)
|
||||
facts = service.list_observed_facts(repository_id)
|
||||
languages = sorted({fact.name for fact in facts if fact.kind == "language"})
|
||||
frameworks = sorted({fact.name for fact in facts if fact.kind == "framework"})
|
||||
run_rows = "\n".join(
|
||||
f"""
|
||||
<tr>
|
||||
@@ -259,6 +282,7 @@ def repository_detail(
|
||||
</div>
|
||||
<p class="muted">{escape(repository.description or '')}</p>
|
||||
<p><span class="pill">{escape(repository.status)}</span> <span class="source">{escape(repository.url)}</span></p>
|
||||
{render_repository_facts(languages, frameworks)}
|
||||
<div class="grid">
|
||||
<section class="panel">
|
||||
<h2>Run Analysis</h2>
|
||||
@@ -699,6 +723,20 @@ def render_candidate_graph(graph: dict, repository_id: int, analysis_run_id: int
|
||||
return f'<div class="tree"><ul>{"".join(items)}</ul></div>'
|
||||
|
||||
|
||||
def render_repository_facts(languages: list[str], frameworks: list[str]) -> str:
|
||||
if not languages and not frameworks:
|
||||
return ""
|
||||
language_pills = "".join(
|
||||
f'<span class="pill">Language: {escape(language)}</span>'
|
||||
for language in languages
|
||||
)
|
||||
framework_pills = "".join(
|
||||
f'<span class="pill">Framework: {escape(framework)}</span>'
|
||||
for framework in frameworks
|
||||
)
|
||||
return f'<p class="actions">{language_pills}{framework_pills}</p>'
|
||||
|
||||
|
||||
def render_candidate_ability_actions(
|
||||
ability: dict,
|
||||
repository_id: int,
|
||||
|
||||
Reference in New Issue
Block a user