generated from coulomb/repo-seed
Provide access to all scope files
This commit is contained in:
@@ -17,12 +17,23 @@ router = APIRouter(include_in_schema=False)
|
||||
APP_NAME = "Repository Scoping"
|
||||
|
||||
|
||||
def page(title: str, body: str, selected_repository: str | None = None) -> HTMLResponse:
|
||||
repository_context = (
|
||||
f'<span class="header-context">{escape(selected_repository)}</span>'
|
||||
if selected_repository
|
||||
else ""
|
||||
)
|
||||
def page(
|
||||
title: str,
|
||||
body: str,
|
||||
selected_repository: str | None = None,
|
||||
selected_repository_id: int | None = None,
|
||||
) -> HTMLResponse:
|
||||
if selected_repository and selected_repository_id is not None:
|
||||
repository_context = (
|
||||
f'<a class="header-context" href="/ui/repos/{selected_repository_id}">'
|
||||
f"{escape(selected_repository)}</a>"
|
||||
)
|
||||
elif selected_repository:
|
||||
repository_context = (
|
||||
f'<span class="header-context">{escape(selected_repository)}</span>'
|
||||
)
|
||||
else:
|
||||
repository_context = ""
|
||||
return HTMLResponse(
|
||||
f"""
|
||||
<!doctype html>
|
||||
@@ -197,7 +208,6 @@ def page(title: str, body: str, selected_repository: str | None = None) -> HTMLR
|
||||
<nav class="actions">
|
||||
<a href="/ui/search">Search</a>
|
||||
<a href="/ui/discovery">Discovery</a>
|
||||
<a href="/ui/scope">SCOPE</a>
|
||||
<a href="/docs">API Docs</a>
|
||||
</nav>
|
||||
</header>
|
||||
@@ -307,6 +317,43 @@ def scope_document() -> HTMLResponse:
|
||||
return page("SCOPE.md", body)
|
||||
|
||||
|
||||
@router.get("/ui/repos/{repository_id}/scope")
|
||||
def repository_scope_document(
|
||||
repository_id: int,
|
||||
service: RegistryService = Depends(get_service),
|
||||
) -> HTMLResponse:
|
||||
repository = service.get_repository(repository_id)
|
||||
checkout = service.ingestion.cached_checkout(repository.url)
|
||||
if checkout is None:
|
||||
rendered = (
|
||||
'<p class="muted">No cached checkout exists for this repository yet. '
|
||||
"Run analysis first, or use a local repository path.</p>"
|
||||
)
|
||||
else:
|
||||
scope_path = checkout.source_path / "SCOPE.md"
|
||||
if scope_path.exists():
|
||||
content = scope_path.read_text(encoding="utf-8")
|
||||
rendered = f'<pre class="scope-document">{escape(content)}</pre>'
|
||||
else:
|
||||
rendered = (
|
||||
'<p class="muted">No SCOPE.md file was found in this '
|
||||
"repository checkout.</p>"
|
||||
)
|
||||
body = f"""
|
||||
<h1>SCOPE.md</h1>
|
||||
<section class="panel stack">
|
||||
<p class="muted">Canonical scope summary for the {escape(repository.name)} repository.</p>
|
||||
{rendered}
|
||||
</section>
|
||||
"""
|
||||
return page(
|
||||
"SCOPE.md",
|
||||
body,
|
||||
selected_repository=repository.name,
|
||||
selected_repository_id=repository.id,
|
||||
)
|
||||
|
||||
|
||||
@router.get("/ui/discovery")
|
||||
def discovery_page(service: RegistryService = Depends(get_service)) -> HTMLResponse:
|
||||
repositories = service.list_repositories()
|
||||
@@ -701,6 +748,7 @@ def repository_detail(
|
||||
<div class="actions">
|
||||
<h1 style="margin-right:auto">{escape(repository.name)}</h1>
|
||||
<a class="button secondary" href="/ui/repos/{repository_id}/export">Export</a>
|
||||
<a class="button secondary" href="/ui/repos/{repository_id}/scope">SCOPE</a>
|
||||
<a class="button secondary" href="/ui">Back</a>
|
||||
</div>
|
||||
<p class="muted">{escape(repository.description or '')}</p>
|
||||
@@ -840,7 +888,12 @@ def repository_detail(
|
||||
</form>
|
||||
</section>
|
||||
"""
|
||||
return page(repository.name, body, selected_repository=repository.name)
|
||||
return page(
|
||||
repository.name,
|
||||
body,
|
||||
selected_repository=repository.name,
|
||||
selected_repository_id=repository.id,
|
||||
)
|
||||
|
||||
|
||||
@router.get("/ui/repos/{repository_id}/export")
|
||||
@@ -1296,6 +1349,7 @@ def analysis_run_detail(
|
||||
f"{repository.name} Run {analysis_run_id}",
|
||||
body,
|
||||
selected_repository=repository.name,
|
||||
selected_repository_id=repository.id,
|
||||
)
|
||||
|
||||
|
||||
@@ -1462,7 +1516,12 @@ def repository_element_listing(
|
||||
</table>
|
||||
</section>
|
||||
"""
|
||||
return page(title, body, selected_repository=repository.name)
|
||||
return page(
|
||||
title,
|
||||
body,
|
||||
selected_repository=repository.name,
|
||||
selected_repository_id=repository.id,
|
||||
)
|
||||
|
||||
|
||||
@router.get("/ui/repos/{repository_id}/analysis-runs/{base_analysis_run_id}/diff/{target_analysis_run_id}")
|
||||
@@ -1519,6 +1578,7 @@ def analysis_run_diff_detail(
|
||||
f"{diff.repository.name} Change Review",
|
||||
body,
|
||||
selected_repository=diff.repository.name,
|
||||
selected_repository_id=diff.repository.id,
|
||||
)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user