This is an automated email from the ASF dual-hosted git repository.
sbp pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tooling-trusted-releases.git
The following commit(s) were added to refs/heads/main by this push:
new f9488a9 Move navigation rendering to the appropriate module
f9488a9 is described below
commit f9488a904e1c2a3392073af6df41afdbde898fec
Author: Sean B. Palmer <[email protected]>
AuthorDate: Mon Dec 29 16:20:02 2025 +0000
Move navigation rendering to the appropriate module
---
atr/get/announce.py | 3 +--
atr/get/checklist.py | 4 ++--
atr/get/checks.py | 3 ++-
atr/get/distribution.py | 5 +++--
atr/get/file.py | 4 ++--
atr/get/finish.py | 3 ++-
atr/get/manual.py | 3 ++-
atr/get/sbom.py | 3 ++-
atr/get/upload.py | 3 ++-
atr/get/vote.py | 3 ++-
atr/get/voting.py | 2 +-
atr/render.py | 53 ++++++++++++++++++++++++++++++++++++++++++++
atr/shared/distribution.py | 55 ----------------------------------------------
13 files changed, 74 insertions(+), 70 deletions(-)
diff --git a/atr/get/announce.py b/atr/get/announce.py
index d2395db..a24f60a 100644
--- a/atr/get/announce.py
+++ b/atr/get/announce.py
@@ -29,7 +29,6 @@ import atr.models.sql as sql
import atr.post as post
import atr.render as render
import atr.shared as shared
-import atr.shared.distribution as distribution
import atr.template as template
import atr.util as util
import atr.web as web
@@ -167,7 +166,7 @@ async def _render_page(
"""
page.style[markupsafe.Markup(page_styles)]
- distribution.html_nav_phase(page, release.project.name, release.version,
staging=False)
+ render.html_nav_phase(page, release.project.name, release.version,
staging=False)
page.h1[
"Announce ",
diff --git a/atr/get/checklist.py b/atr/get/checklist.py
index 5cdf004..d33db17 100644
--- a/atr/get/checklist.py
+++ b/atr/get/checklist.py
@@ -25,7 +25,7 @@ import atr.db as db
import atr.db.interaction as interaction
import atr.get.vote as vote
import atr.htm as htm
-import atr.shared.distribution as distribution
+import atr.render as render
import atr.template as template
import atr.util as util
import atr.web as web
@@ -67,7 +67,7 @@ async def selected(session: web.Committer | None,
project_name: str, version_nam
checklist_html =
markupsafe.Markup(cmarkgfm.github_flavored_markdown_to_html(substituted_markdown))
page = htm.Block()
- distribution.html_nav(
+ render.html_nav(
page,
back_url=util.as_url(vote.selected, project_name=project_name,
version_name=version_name),
back_anchor=f"Vote on {project.short_display_name} {version_name}",
diff --git a/atr/get/checks.py b/atr/get/checks.py
index 6363b25..1781b2f 100644
--- a/atr/get/checks.py
+++ b/atr/get/checks.py
@@ -35,6 +35,7 @@ import atr.get.vote as vote
import atr.htm as htm
import atr.models.sql as sql
import atr.post as post
+import atr.render as render
import atr.shared as shared
import atr.shared.draft as draft
import atr.storage as storage
@@ -493,7 +494,7 @@ def _render_file_row(
def _render_header(page: htm.Block, release: sql.Release) -> None:
- shared.distribution.html_nav(
+ render.html_nav(
page,
back_url=util.as_url(vote.selected, project_name=release.project.name,
version_name=release.version),
back_anchor=f"Vote on {release.project.short_display_name}
{release.version}",
diff --git a/atr/get/distribution.py b/atr/get/distribution.py
index 28985fe..4f166a9 100644
--- a/atr/get/distribution.py
+++ b/atr/get/distribution.py
@@ -22,6 +22,7 @@ import atr.form as form
import atr.htm as htm
import atr.models.sql as sql
import atr.post as post
+import atr.render as render
import atr.shared as shared
import atr.template as template
import atr.util as util
@@ -39,7 +40,7 @@ async def list_get(session: web.Committer, project: str,
version: str) -> str:
release = await shared.distribution.release_validated(project, version,
staging=None)
staging = release.phase == sql.ReleasePhase.RELEASE_CANDIDATE_DRAFT
- shared.distribution.html_nav_phase(block, project, version, staging)
+ render.html_nav_phase(block, project, version, staging)
record_a_distribution = htm.a(
".btn.btn-primary",
@@ -123,7 +124,7 @@ async def _record_form_page(project: str, version: str,
staging: bool) -> str:
await shared.distribution.release_validated(project, version,
staging=staging)
block = htm.Block()
- shared.distribution.html_nav_phase(block, project, version,
staging=staging)
+ render.html_nav_phase(block, project, version, staging=staging)
title = "Record a staging distribution" if staging else "Record a manual
distribution"
block.h1[title]
diff --git a/atr/get/file.py b/atr/get/file.py
index 165f42e..b4f968f 100644
--- a/atr/get/file.py
+++ b/atr/get/file.py
@@ -24,7 +24,7 @@ import atr.get.finish as finish
import atr.get.vote as vote
import atr.htm as htm
import atr.models.sql as sql
-import atr.shared.distribution as distribution
+import atr.render as render
import atr.template as template
import atr.util as util
import atr.web as web
@@ -57,7 +57,7 @@ async def selected(session: web.Committer, project_name: str,
version_name: str)
nav_info = _get_navigation_info(release)
if nav_info:
back_url, back_label, phase_label = nav_info
- distribution.html_nav(block, back_url, back_label, phase_label)
+ render.html_nav(block, back_url, back_label, phase_label)
block.h1["Files in ", htm.strong[release.project.short_display_name], " ",
htm.em[release.version]]
diff --git a/atr/get/finish.py b/atr/get/finish.py
index 386098d..921bf83 100644
--- a/atr/get/finish.py
+++ b/atr/get/finish.py
@@ -40,6 +40,7 @@ import atr.get.root as root
import atr.htm as htm
import atr.mapping as mapping
import atr.models.sql as sql
+import atr.render as render
import atr.shared as shared
import atr.template as template
import atr.util as util
@@ -250,7 +251,7 @@ async def _render_page(
"""Render the finish page using htm.py."""
page = htm.Block()
- shared.distribution.html_nav(
+ render.html_nav(
page,
back_url=util.as_url(root.index),
back_anchor="Select a release",
diff --git a/atr/get/manual.py b/atr/get/manual.py
index 2919f1c..ee88a1e 100644
--- a/atr/get/manual.py
+++ b/atr/get/manual.py
@@ -24,6 +24,7 @@ import atr.get.vote as vote
import atr.htm as htm
import atr.models.sql as sql
import atr.post as post
+import atr.render as render
import atr.shared as shared
import atr.template as template
import atr.util as util
@@ -90,7 +91,7 @@ async def _render_page(release, revision: str) -> htm.Element:
project_name=release.project.name,
version_name=release.version,
)
- shared.distribution.html_nav(
+ render.html_nav(
page,
back_link_url,
f"Compose {release.short_display_name}",
diff --git a/atr/get/sbom.py b/atr/get/sbom.py
index f605224..b65fc11 100644
--- a/atr/get/sbom.py
+++ b/atr/get/sbom.py
@@ -32,6 +32,7 @@ import atr.get.vote as vote
import atr.htm as htm
import atr.models.results as results
import atr.models.sql as sql
+import atr.render as render
import atr.sbom as sbom
import atr.sbom.models.osv as osv
import atr.shared as shared
@@ -70,7 +71,7 @@ async def report(session: web.Committer, project: str,
version: str, file_path:
back_anchor = f"Vote on {release.project.short_display_name}
{release.version}"
phase = "VOTE"
- shared.distribution.html_nav(
+ render.html_nav(
block,
back_url=back_url,
back_anchor=back_anchor,
diff --git a/atr/get/upload.py b/atr/get/upload.py
index 4a86c1b..05c8280 100644
--- a/atr/get/upload.py
+++ b/atr/get/upload.py
@@ -27,6 +27,7 @@ import atr.get.compose as compose
import atr.get.keys as keys
import atr.htm as htm
import atr.models.sql as sql
+import atr.render as render
import atr.shared as shared
import atr.template as template
import atr.util as util
@@ -43,7 +44,7 @@ async def selected(session: web.Committer, project_name: str,
version_name: str)
block = htm.Block()
- shared.distribution.html_nav(
+ render.html_nav(
block,
util.as_url(compose.selected, project_name=release.project.name,
version_name=release.version),
f"Compose {release.short_display_name}",
diff --git a/atr/get/vote.py b/atr/get/vote.py
index f5e4d20..b243e25 100644
--- a/atr/get/vote.py
+++ b/atr/get/vote.py
@@ -37,6 +37,7 @@ import atr.htm as htm
import atr.mapping as mapping
import atr.models.sql as sql
import atr.post as post
+import atr.render as render
import atr.shared as shared
import atr.storage as storage
import atr.template as template
@@ -303,7 +304,7 @@ def _render_checklist_card(page: htm.Block, release:
sql.Release) -> None:
def _render_header(page: htm.Block, release: sql.Release,
show_resolve_section: bool) -> None:
- shared.distribution.html_nav(
+ render.html_nav(
page,
back_url=util.as_url(root.index),
back_anchor="Select a release",
diff --git a/atr/get/voting.py b/atr/get/voting.py
index c41d6f9..f12b7a0 100644
--- a/atr/get/voting.py
+++ b/atr/get/voting.py
@@ -120,7 +120,7 @@ async def _render_page(
project_name=release.project.name,
version_name=release.version,
)
- shared.distribution.html_nav(
+ render.html_nav(
page,
back_link_url,
f"Compose {release.short_display_name}",
diff --git a/atr/render.py b/atr/render.py
index f1fab17..5e9b3c5 100644
--- a/atr/render.py
+++ b/atr/render.py
@@ -15,9 +15,15 @@
# specific language governing permissions and limitations
# under the License.
+from typing import Literal
+
import htpy
+import atr.get as get
import atr.htm as htm
+import atr.util as util
+
+type Phase = Literal["COMPOSE", "VOTE", "FINISH"]
def body_tabs(
@@ -71,6 +77,53 @@ def body_tabs(
return htm.div[tabs.collect(), tab_content]
+def html_nav(container: htm.Block, back_url: str, back_anchor: str, phase:
Phase) -> None:
+ classes = ".d-flex.justify-content-between.align-items-center"
+ block = htm.Block(htm.p, classes=classes)
+ block.a(".atr-back-link", href=back_url)[f"← Back to {back_anchor}"]
+ span = htm.Block(htm.span)
+
+ def _phase(actual: Phase, expected: Phase) -> None:
+ match expected:
+ case "COMPOSE":
+ symbol = "①"
+ case "VOTE":
+ symbol = "②"
+ case "FINISH":
+ symbol = "③"
+ if actual == expected:
+ span.strong(f".atr-phase-{actual}.atr-phase-symbol")[symbol]
+ span.span(f".atr-phase-{actual}.atr-phase-label")[actual]
+ else:
+ span.span(".atr-phase-symbol-other")[symbol]
+
+ _phase(phase, "COMPOSE")
+ span.span(".atr-phase-arrow")["→"]
+ _phase(phase, "VOTE")
+ span.span(".atr-phase-arrow")["→"]
+ _phase(phase, "FINISH")
+
+ block.append(span.collect(separator=" "))
+ container.append(block)
+
+
+def html_nav_phase(block: htm.Block, project: str, version: str, staging:
bool) -> None:
+ label: Phase
+ route, label = (get.compose.selected, "COMPOSE")
+ if not staging:
+ route, label = (get.finish.selected, "FINISH")
+ html_nav(
+ block,
+ util.as_url(
+ route,
+ project_name=project,
+ version_name=version,
+ ),
+ back_anchor=f"{label.title()} {project} {version}",
+ phase=label,
+ )
+
+
def _variables_tab(
tab_id_prefix: str,
template_variables: list[tuple[str, str]],
diff --git a/atr/shared/distribution.py b/atr/shared/distribution.py
index 4c2d6ad..444d066 100644
--- a/atr/shared/distribution.py
+++ b/atr/shared/distribution.py
@@ -18,19 +18,14 @@
from __future__ import annotations
import enum
-from typing import Literal
import pydantic
import atr.db as db
import atr.form as form
-import atr.get as get
import atr.htm as htm
import atr.models.distribution as distribution
import atr.models.sql as sql
-import atr.util as util
-
-type Phase = Literal["COMPOSE", "VOTE", "FINISH"]
class DistributionPlatform(enum.Enum):
@@ -118,56 +113,6 @@ class DistributeForm(form.Form):
return self
-# TODO: Move this to an appropriate module
-def html_nav(container: htm.Block, back_url: str, back_anchor: str, phase:
Phase) -> None:
- classes = ".d-flex.justify-content-between.align-items-center"
- block = htm.Block(htm.p, classes=classes)
- block.a(".atr-back-link", href=back_url)[f"← Back to {back_anchor}"]
- span = htm.Block(htm.span)
-
- def _phase(actual: Phase, expected: Phase) -> None:
- # nonlocal span
- match expected:
- case "COMPOSE":
- symbol = "①"
- case "VOTE":
- symbol = "②"
- case "FINISH":
- symbol = "③"
- if actual == expected:
- span.strong(f".atr-phase-{actual}.atr-phase-symbol")[symbol]
- span.span(f".atr-phase-{actual}.atr-phase-label")[actual]
- else:
- span.span(".atr-phase-symbol-other")[symbol]
-
- _phase(phase, "COMPOSE")
- span.span(".atr-phase-arrow")["→"]
- _phase(phase, "VOTE")
- span.span(".atr-phase-arrow")["→"]
- _phase(phase, "FINISH")
-
- block.append(span.collect(separator=" "))
- container.append(block)
-
-
-# TODO: Move this to a more appropriate module
-def html_nav_phase(block: htm.Block, project: str, version: str, staging:
bool) -> None:
- label: Phase
- route, label = (get.compose.selected, "COMPOSE")
- if not staging:
- route, label = (get.finish.selected, "FINISH")
- html_nav(
- block,
- util.as_url(
- route,
- project_name=project,
- version_name=version,
- ),
- back_anchor=f"{label.title()} {project} {version}",
- phase=label,
- )
-
-
def html_submitted_values_table(block: htm.Block, dd: distribution.Data) ->
None:
tbody = htm.tbody[
html_tr("Platform", dd.platform.name),
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]