You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tooling.apache.org by ar...@apache.org on 2026/04/21 08:15:36 UTC
(tooling-trusted-releases) 01/04: #510 - add archive button
This is an automated email from the ASF dual-hosted git repository.
alitheg pushed a commit to branch project_archival
in repository https://gitbox.apache.org/repos/asf/tooling-trusted-releases.git
commit 68024092b278f5a3ac8d57d1e398bff66fe0f663
Author: Alastair McFarlane <ar...@apache.org>
AuthorDate: Fri Apr 17 16:50:11 2026 +0100
#510 - add archive button
---
atr/get/projects.py | 47 ++++++++++++++++++++++++++++++---------------
atr/shared/projects.py | 4 ++++
atr/templates/projects.html | 4 +---
3 files changed, 36 insertions(+), 19 deletions(-)
diff --git a/atr/get/projects.py b/atr/get/projects.py
index 2fa747aa..0179e66a 100644
--- a/atr/get/projects.py
+++ b/atr/get/projects.py
@@ -94,28 +94,43 @@ async def add_project(
@get.typed
-async def projects(_session: web.Public, _projects: Literal["projects"]) -> str:
+async def projects(session: web.Public, _projects: Literal["projects"]) -> str:
"""
URL: /projects
Main project directory page.
"""
async with db.session() as data:
- projects = await data.project(_committee=True).order_by(sql.Project.name).all()
-
- delete_forms: dict[str, htm.Element] = {}
- for project in projects:
- delete_forms[str(project.key)] = await form.render(
- model_cls=shared.projects.DeleteSelectedProject,
- action=util.as_url(post.projects.delete),
- form_classes=".d-inline-block.m-0",
- submit_classes="btn-sm btn-outline-danger",
- submit_label="Delete project",
- empty=True,
- defaults={"project_key": str(project.key)},
- confirm="Are you sure you want to delete this project? This cannot be undone.",
- )
+ projects = await data.project(_committee=True, _releases=True).order_by(sql.Project.name).all()
+
+ action_forms: dict[str, htm.Element] = {}
+ if session is not None:
+ for project in projects:
+ if not (user.is_committee_member(project.committee, session.uid) or session.is_admin):
+ continue
+ if project.releases:
+ action_forms[str(project.key)] = await form.render(
+ model_cls=shared.projects.ArchiveSelectedProject,
+ action="#",
+ form_classes=".d-inline-block.m-0",
+ submit_classes="btn-sm btn-outline-secondary",
+ submit_label="Archive project",
+ submit_disabled=True,
+ empty=True,
+ defaults={"project_key": str(project.key)},
+ )
+ else:
+ action_forms[str(project.key)] = await form.render(
+ model_cls=shared.projects.DeleteSelectedProject,
+ action=util.as_url(post.projects.delete),
+ form_classes=".d-inline-block.m-0",
+ submit_classes="btn-sm btn-outline-danger",
+ submit_label="Delete project",
+ empty=True,
+ defaults={"project_key": str(project.key)},
+ confirm="Are you sure you want to delete this project? This cannot be undone.",
+ )
- return await template.render("projects.html", projects=projects, delete_forms=delete_forms)
+ return await template.render("projects.html", projects=projects, action_forms=action_forms)
@get.typed
diff --git a/atr/shared/projects.py b/atr/shared/projects.py
index 92c3974b..64721b28 100644
--- a/atr/shared/projects.py
+++ b/atr/shared/projects.py
@@ -271,6 +271,10 @@ class RemoveLanguageForm(form.Form):
language_to_remove: str = form.label("Language to remove", widget=form.Widget.HIDDEN)
+class ArchiveSelectedProject(form.Form):
+ project_key: safe.ProjectKey = form.label("Project name", widget=form.Widget.HIDDEN)
+
+
class DeleteProjectForm(form.Form):
variant: DELETE_PROJECT = form.value(DELETE_PROJECT)
project_key: safe.ProjectKey = form.label("Project name", widget=form.Widget.HIDDEN)
diff --git a/atr/templates/projects.html b/atr/templates/projects.html
index d9e2defb..77649c61 100644
--- a/atr/templates/projects.html
+++ b/atr/templates/projects.html
@@ -71,9 +71,7 @@
</div>
{% endif %}
- {# TODO: Could add "or is_viewing_as_admin_fn(current_user.uid)" #}
- {# But then the page is noisy for admins #}
- {% if project.created_by == current_user.uid %}<div class="mt-3 position-relative z-1">{{ delete_forms[project.key] }}</div>{% endif %}
+ {% if project.key in action_forms %}<div class="mt-3 position-relative z-1">{{ action_forms[project.key] }}</div>{% endif %}
</div>
</div>
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@tooling.apache.org
For additional commands, e-mail: commits-help@tooling.apache.org