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 85f65fa  Fix function order in GET route modules
85f65fa is described below

commit 85f65fa2a48aa566672713abd9b67c64fe25ec3f
Author: Sean B. Palmer <[email protected]>
AuthorDate: Tue Dec 23 18:51:12 2025 +0000

    Fix function order in GET route modules
---
 atr/get/announce.py | 116 ++++++++++++++++++++++++++--------------------------
 atr/get/file.py     |  34 +++++++--------
 atr/get/finish.py   |  20 ++++-----
 atr/get/manual.py   |  38 ++++++++---------
 atr/get/root.py     |  10 ++---
 atr/get/start.py    |  72 ++++++++++++++++----------------
 atr/get/voting.py   |  10 ++---
 7 files changed, 150 insertions(+), 150 deletions(-)

diff --git a/atr/get/announce.py b/atr/get/announce.py
index 1025aee..d2395db 100644
--- a/atr/get/announce.py
+++ b/atr/get/announce.py
@@ -86,6 +86,64 @@ async def selected(session: web.Committer, project_name: 
str, version_name: str)
     )
 
 
+def _render_body_tabs(default_body: str) -> htm.Element:
+    """Render the tabbed interface for body editing and preview."""
+    return render.body_tabs("announce-body", default_body, 
construct.announce_template_variables())
+
+
+def _render_download_path_field(default_value: str, description: str) -> 
htm.Element:
+    """Render the download path suffix field with custom help text."""
+    base_text = description.split(" plus this suffix")[0] if (" plus this 
suffix" in description) else description
+    return htm.div[
+        htpy.input(
+            "#download_path_suffix.form-control",
+            type="text",
+            name="download_path_suffix",
+            value=default_value,
+        ),
+        htpy.div(".form-text.text-muted.mt-2", 
data_base_text=base_text)[description],
+    ]
+
+
+def _render_mailing_list_with_warning(choices: list[tuple[str, str]], 
default_value: str) -> htm.Element:
+    """Render the mailing list radio buttons with a warning card."""
+    container = htm.Block(htm.div)
+
+    # Radio buttons
+    radio_container = htm.div(".d-flex.flex-wrap.gap-2.mb-3")
+    radio_buttons = []
+    for value, label in choices:
+        radio_id = f"mailing_list_{value}"
+        radio_attrs = {
+            "type": "radio",
+            "name": "mailing_list",
+            "value": value,
+        }
+        if value == default_value:
+            radio_attrs["checked"] = ""
+
+        radio_buttons.append(
+            htm.div(".form-check")[
+                htpy.input(f"#{radio_id}.form-check-input", **radio_attrs),
+                htpy.label(".form-check-label", for_=radio_id)[label],
+            ]
+        )
+    container.append(radio_container[radio_buttons])
+
+    # Warning card
+    warning_card = htm.div(".card.bg-warning-subtle.mb-3")[
+        htm.span(".card-body.p-3")[
+            htpy.i(".bi.bi-exclamation-triangle.me-1"),
+            htm.strong["TODO: "],
+            "The limited options above are provided for testing purposes. In 
the finished version of ATR, "
+            "you will be able to send to your own specified mailing lists.",
+        ]
+    ]
+    container.append(warning_card)
+
+    return container.collect()
+
+
 async def _render_page(
     release: sql.Release,
     mailing_list_choices: list[tuple[str, str]],
@@ -172,61 +230,3 @@ def _render_release_card(release: sql.Release) -> 
htm.Element:
         ],
     ]
     return card
-
-
-def _render_body_tabs(default_body: str) -> htm.Element:
-    """Render the tabbed interface for body editing and preview."""
-    return render.body_tabs("announce-body", default_body, 
construct.announce_template_variables())
-
-
-def _render_mailing_list_with_warning(choices: list[tuple[str, str]], 
default_value: str) -> htm.Element:
-    """Render the mailing list radio buttons with a warning card."""
-    container = htm.Block(htm.div)
-
-    # Radio buttons
-    radio_container = htm.div(".d-flex.flex-wrap.gap-2.mb-3")
-    radio_buttons = []
-    for value, label in choices:
-        radio_id = f"mailing_list_{value}"
-        radio_attrs = {
-            "type": "radio",
-            "name": "mailing_list",
-            "value": value,
-        }
-        if value == default_value:
-            radio_attrs["checked"] = ""
-
-        radio_buttons.append(
-            htm.div(".form-check")[
-                htpy.input(f"#{radio_id}.form-check-input", **radio_attrs),
-                htpy.label(".form-check-label", for_=radio_id)[label],
-            ]
-        )
-    container.append(radio_container[radio_buttons])
-
-    # Warning card
-    warning_card = htm.div(".card.bg-warning-subtle.mb-3")[
-        htm.span(".card-body.p-3")[
-            htpy.i(".bi.bi-exclamation-triangle.me-1"),
-            htm.strong["TODO: "],
-            "The limited options above are provided for testing purposes. In 
the finished version of ATR, "
-            "you will be able to send to your own specified mailing lists.",
-        ]
-    ]
-    container.append(warning_card)
-
-    return container.collect()
-
-
-def _render_download_path_field(default_value: str, description: str) -> 
htm.Element:
-    """Render the download path suffix field with custom help text."""
-    base_text = description.split(" plus this suffix")[0] if (" plus this 
suffix" in description) else description
-    return htm.div[
-        htpy.input(
-            "#download_path_suffix.form-control",
-            type="text",
-            name="download_path_suffix",
-            value=default_value,
-        ),
-        htpy.div(".form-text.text-muted.mt-2", 
data_base_text=base_text)[description],
-    ]
diff --git a/atr/get/file.py b/atr/get/file.py
index 225f892..165f42e 100644
--- a/atr/get/file.py
+++ b/atr/get/file.py
@@ -175,23 +175,6 @@ async def selected_path(session: web.Committer, 
project_name: str, version_name:
     )
 
 
-def _render_file_content(block: htm.Block, content: str, is_text: bool, 
is_truncated: bool, max_view_size: int) -> None:
-    card = htm.Block(htm.div, classes=".card.mb-4")
-    card.div(".card-header")[htm.h3(".mb-0")["File content" + (" (Hexdump)" if 
(not is_text) else "")]]
-
-    if is_text:
-        
card.div(".card-body.p-0")[htm.pre(".bg-light.p-4.rounded-bottom.mb-0.text-break")[content]]
-    else:
-        
card.div(".card-body.p-0")[htm.pre(".bg-light.p-4.rounded-bottom.mb-0.text-break")[htm.code[content]]]
-
-    if is_truncated:
-        card.div(".card-footer.text-muted.small")[
-            f"Note: File content truncated to the first 
{util.format_file_size(max_view_size)}."
-        ]
-
-    block.append(card.collect())
-
-
 def _get_navigation_info(release: sql.Release) -> tuple[str, str, Phase] | 
None:
     """Get back URL, back label, and phase label based on release phase."""
     if release.phase == sql.ReleasePhase.RELEASE_CANDIDATE_DRAFT:
@@ -226,3 +209,20 @@ def _phase_display_name(phase: sql.ReleasePhase) -> str:
     elif phase == sql.ReleasePhase.RELEASE:
         return "release"
     return "release"
+
+
+def _render_file_content(block: htm.Block, content: str, is_text: bool, 
is_truncated: bool, max_view_size: int) -> None:
+    card = htm.Block(htm.div, classes=".card.mb-4")
+    card.div(".card-header")[htm.h3(".mb-0")["File content" + (" (Hexdump)" if 
(not is_text) else "")]]
+
+    if is_text:
+        
card.div(".card-body.p-0")[htm.pre(".bg-light.p-4.rounded-bottom.mb-0.text-break")[content]]
+    else:
+        
card.div(".card-body.p-0")[htm.pre(".bg-light.p-4.rounded-bottom.mb-0.text-break")[htm.code[content]]]
+
+    if is_truncated:
+        card.div(".card-footer.text-muted.small")[
+            f"Note: File content truncated to the first 
{util.format_file_size(max_view_size)}."
+        ]
+
+    block.append(card.collect())
diff --git a/atr/get/finish.py b/atr/get/finish.py
index 880dfe5..386098d 100644
--- a/atr/get/finish.py
+++ b/atr/get/finish.py
@@ -344,6 +344,16 @@ async def _render_page(
     )
 
 
+def _render_rc_preview_table(affected_paths: list[tuple[str, str]]) -> 
htm.Element:
+    """Render the RC tags preview table."""
+    rows = [htm.tr[htm.td[original], htm.td[stripped]] for original, stripped 
in affected_paths]
+
+    return htm.div[
+        htm.p(".mb-2")["Preview of changes:"],
+        
htm.table(".table.table-sm.table-striped.border.mt-3")[htm.tbody[rows]],
+    ]
+
+
 def _render_rc_tags_section(rc_analysis: RCTagAnalysisResult) -> htm.Element:
     """Render the remove RC tags section."""
     section = htm.Block()
@@ -371,16 +381,6 @@ def _render_rc_tags_section(rc_analysis: 
RCTagAnalysisResult) -> htm.Element:
     return section.collect()
 
 
-def _render_rc_preview_table(affected_paths: list[tuple[str, str]]) -> 
htm.Element:
-    """Render the RC tags preview table."""
-    rows = [htm.tr[htm.td[original], htm.td[stripped]] for original, stripped 
in affected_paths]
-
-    return htm.div[
-        htm.p(".mb-2")["Preview of changes:"],
-        
htm.table(".table.table-sm.table-striped.border.mt-3")[htm.tbody[rows]],
-    ]
-
-
 def _render_release_card(release: sql.Release) -> htm.Element:
     """Render the release information card."""
     card = htm.div(".card.mb-4.shadow-sm", id=release.name)[
diff --git a/atr/get/manual.py b/atr/get/manual.py
index e83f0c8..2919f1c 100644
--- a/atr/get/manual.py
+++ b/atr/get/manual.py
@@ -54,25 +54,6 @@ async def resolve_selected(session: web.Committer, 
project_name: str, version_na
     )
 
 
-def _render_resolve_page(release: sql.Release) -> htm.Element:
-    page = htm.Block()
-
-    back_url = util.as_url(vote.selected, project_name=release.project.name, 
version_name=release.version)
-    page.p[htm.a(".atr-back-link", href=back_url)[f"← Back to Vote for 
{release.short_display_name}"]]
-
-    page.h1[f"Resolve vote for {release.short_display_name}"]
-    page.p["This is a manual vote resolution."]
-
-    form.render_block(
-        page,
-        model_cls=shared.manual.ResolveVoteForm,
-        form_classes=".atr-canary.py-4.px-5.mb-4.border.rounded",
-        submit_label="Resolve vote",
-    )
-
-    return page.collect()
-
-
 @get.committer("/manual/start/<project_name>/<version_name>/<revision>")
 async def start_selected_revision(
     session: web.Committer, project_name: str, version_name: str, revision: str
@@ -152,3 +133,22 @@ async def _render_page(release, revision: str) -> 
htm.Element:
     page.append(manual_form)
 
     return page.collect()
+
+
+def _render_resolve_page(release: sql.Release) -> htm.Element:
+    page = htm.Block()
+
+    back_url = util.as_url(vote.selected, project_name=release.project.name, 
version_name=release.version)
+    page.p[htm.a(".atr-back-link", href=back_url)[f"← Back to Vote for 
{release.short_display_name}"]]
+
+    page.h1[f"Resolve vote for {release.short_display_name}"]
+    page.p["This is a manual vote resolution."]
+
+    form.render_block(
+        page,
+        model_cls=shared.manual.ResolveVoteForm,
+        form_classes=".atr-canary.py-4.px-5.mb-4.border.rounded",
+        submit_label="Resolve vote",
+    )
+
+    return page.collect()
diff --git a/atr/get/root.py b/atr/get/root.py
index 299026b..808680f 100644
--- a/atr/get/root.py
+++ b/atr/get/root.py
@@ -139,6 +139,11 @@ async def index(session: web.Committer | None) -> 
quart_response.Response | str:
     return await template.render("index-public.html")
 
 
[email protected]("/policies")
+async def policies(session: web.Committer | None) -> str:
+    return await template.blank("Policies", content=_POLICIES)
+
+
 @get.public("/miscellaneous/resolved.json")
 async def resolved_json(session: web.Committer | None) -> 
quart_response.Response:
     json_path = pathlib.Path(config.get().PROJECT_ROOT) / "atr" / "static" / 
"json" / "resolved.json"
@@ -147,11 +152,6 @@ async def resolved_json(session: web.Committer | None) -> 
quart_response.Respons
     return quart_response.Response(content, mimetype="application/json")
 
 
[email protected]("/policies")
-async def policies(session: web.Committer | None) -> str:
-    return await template.blank("Policies", content=_POLICIES)
-
-
 @get.committer("/tutorial")
 async def tutorial(session: web.Committer) -> str:
     """Tutorial page."""
diff --git a/atr/get/start.py b/atr/get/start.py
index 0c8ec90..25c5ffc 100644
--- a/atr/get/start.py
+++ b/atr/get/start.py
@@ -48,6 +48,42 @@ async def selected(session: web.Committer, project_name: 
str) -> str:
     )
 
 
+def _existing_releases(ul: htm.Block, releases: list[sql.Release], 
max_revisions: int = 18) -> None:
+    for i, release in enumerate(releases):
+        if i >= max_revisions:
+            break
+
+        phase_symbol = _get_phase_symbol(release.phase)
+        ul.li(".col-6.col-sm-4.col-md-3.col-lg-2")[
+            htm.div(".text-nowrap")[
+                htm.span(class_="atr-phase-symbol fs-6")[phase_symbol],
+                " ",
+                release.version,
+            ]
+        ]
+
+    if len(releases) > max_revisions:
+        ul.li(".col-6.col-sm-4.col-md-3.col-lg-2")[
+            htm.div(".text-center")[
+                htm.strong["..."],
+                " ",
+                htm.span(".text-muted.ms-1")[f"{len(releases) - max_revisions} 
more"],
+            ]
+        ]
+
+
+def _get_phase_symbol(phase: sql.ReleasePhase) -> str:
+    match phase:
+        case sql.ReleasePhase.RELEASE_CANDIDATE_DRAFT:
+            return "①"
+        case sql.ReleasePhase.RELEASE_CANDIDATE:
+            return "②"
+        case sql.ReleasePhase.RELEASE_PREVIEW:
+            return "③"
+        case sql.ReleasePhase.RELEASE:
+            return "Ⓡ"
+
+
 async def _render_page(project: sql.Project, releases: list[sql.Release]) -> 
htm.Element:
     page = htm.Block()
 
@@ -91,39 +127,3 @@ async def _render_page(project: sql.Project, releases: 
list[sql.Release]) -> htm
         ".",
     ]
     return page.collect()
-
-
-def _existing_releases(ul: htm.Block, releases: list[sql.Release], 
max_revisions: int = 18) -> None:
-    for i, release in enumerate(releases):
-        if i >= max_revisions:
-            break
-
-        phase_symbol = _get_phase_symbol(release.phase)
-        ul.li(".col-6.col-sm-4.col-md-3.col-lg-2")[
-            htm.div(".text-nowrap")[
-                htm.span(class_="atr-phase-symbol fs-6")[phase_symbol],
-                " ",
-                release.version,
-            ]
-        ]
-
-    if len(releases) > max_revisions:
-        ul.li(".col-6.col-sm-4.col-md-3.col-lg-2")[
-            htm.div(".text-center")[
-                htm.strong["..."],
-                " ",
-                htm.span(".text-muted.ms-1")[f"{len(releases) - max_revisions} 
more"],
-            ]
-        ]
-
-
-def _get_phase_symbol(phase: sql.ReleasePhase) -> str:
-    match phase:
-        case sql.ReleasePhase.RELEASE_CANDIDATE_DRAFT:
-            return "①"
-        case sql.ReleasePhase.RELEASE_CANDIDATE:
-            return "②"
-        case sql.ReleasePhase.RELEASE_PREVIEW:
-            return "③"
-        case sql.ReleasePhase.RELEASE:
-            return "Ⓡ"
diff --git a/atr/get/voting.py b/atr/get/voting.py
index 6c095d3..c41d6f9 100644
--- a/atr/get/voting.py
+++ b/atr/get/voting.py
@@ -100,6 +100,11 @@ async def _check_keys_warning(committee: sql.Committee) -> 
bool:
     return not await aiofiles.os.path.isfile(keys_file_path)
 
 
+def _render_body_tabs(default_body: str) -> htm.Element:
+    """Render the tabbed interface for body editing and preview."""
+    return render.body_tabs("vote-body", default_body, 
construct.vote_template_variables())
+
+
 async def _render_page(
     release,
     permitted_recipients: list[str],
@@ -176,8 +181,3 @@ async def _render_page(
     page.append(htpy.div("#vote-config.d-none", data_preview_url=preview_url, 
data_min_hours=str(min_hours)))
 
     return page.collect()
-
-
-def _render_body_tabs(default_body: str) -> htm.Element:
-    """Render the tabbed interface for body editing and preview."""
-    return render.body_tabs("vote-body", default_body, 
construct.vote_template_variables())


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to