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-release.git


The following commit(s) were added to refs/heads/main by this push:
     new 7016f9b  Rename VotePolicy and associated interfaces to ReleasePolicy
7016f9b is described below

commit 7016f9b7ea1abf5d4dff6412791e3c96e497addf
Author: Sean B. Palmer <[email protected]>
AuthorDate: Sat May 3 09:11:54 2025 +0100

    Rename VotePolicy and associated interfaces to ReleasePolicy
---
 atr/blueprints/admin/admin.py                      |  2 +-
 atr/construct.py                                   | 28 +++----
 atr/db/__init__.py                                 | 92 +++++++++++-----------
 atr/db/models.py                                   | 18 ++---
 atr/routes/projects.py                             | 68 ++++++++--------
 atr/routes/voting.py                               |  8 +-
 atr/templates/project-view.html                    | 12 +--
 ...ote-policy-add.html => release-policy-add.html} |  2 +-
 ...e-policy-edit.html => release-policy-edit.html} |  2 +-
 ...e-policy-form.html => release-policy-form.html} |  0
 10 files changed, 116 insertions(+), 116 deletions(-)

diff --git a/atr/blueprints/admin/admin.py b/atr/blueprints/admin/admin.py
index a25c238..279fbb4 100644
--- a/atr/blueprints/admin/admin.py
+++ b/atr/blueprints/admin/admin.py
@@ -70,10 +70,10 @@ async def admin_data(model: str = "Committee") -> str:
             "Project": data.project,
             "PublicSigningKey": data.public_signing_key,
             "Release": data.release,
+            "ReleasePolicy": data.release_policy,
             "SSHKey": data.ssh_key,
             "Task": data.task,
             "TextValue": data.text_value,
-            "VotePolicy": data.vote_policy,
         }
 
         if model not in model_methods:
diff --git a/atr/construct.py b/atr/construct.py
index 3f5dd66..58feee9 100644
--- a/atr/construct.py
+++ b/atr/construct.py
@@ -78,15 +78,15 @@ async def announce_release_body(body: str, options: 
AnnounceReleaseOptions) -> s
 
 async def announce_release_default(project_name: str) -> str:
     async with db.session() as data:
-        project = await data.project(name=project_name, 
_vote_policy=True).demand(
+        project = await data.project(name=project_name, 
_release_policy=True).demand(
             RuntimeError(f"Project {project_name} not found")
         )
-        vote_policy = project.vote_policy
-    if vote_policy is not None:
-        # NOTE: Do not use "if vote_policy.announce_release_template is None"
+        release_policy = project.release_policy
+    if release_policy is not None:
+        # NOTE: Do not use "if release_policy.announce_release_template is 
None"
         # We want to check for the empty string too
-        if vote_policy.announce_release_template:
-            return vote_policy.announce_release_template
+        if release_policy.announce_release_template:
+            return release_policy.announce_release_template
 
     return """\
 The Apache [COMMITTEE] project team is pleased to announce the
@@ -127,9 +127,9 @@ async def start_vote_body(body: str, options: 
StartVoteOptions) -> str:
 
     checklist_content = ""
     async with db.session() as data:
-        vote_policy = await db.get_project_vote_policy(data, 
options.project_name)
-        if vote_policy:
-            checklist_content = vote_policy.release_checklist or ""
+        release_policy = await db.get_project_release_policy(data, 
options.project_name)
+        if release_policy:
+            checklist_content = release_policy.release_checklist or ""
 
     # Perform substitutions in the body
     # TODO: Handle the DURATION == 0 case
@@ -147,13 +147,13 @@ async def start_vote_body(body: str, options: 
StartVoteOptions) -> str:
 
 async def start_vote_default(project_name: str) -> str:
     async with db.session() as data:
-        vote_policy = await db.get_project_vote_policy(data, project_name)
+        release_policy = await db.get_project_release_policy(data, 
project_name)
 
-    if vote_policy is not None:
-        # NOTE: Do not use "if vote_policy.announce_release_template is None"
+    if release_policy is not None:
+        # NOTE: Do not use "if release_policy.announce_release_template is 
None"
         # We want to check for the empty string too
-        if vote_policy.start_vote_template:
-            return vote_policy.start_vote_template
+        if release_policy.start_vote_template:
+            return release_policy.start_vote_template
 
     return """Hello [COMMITTEE],
 
diff --git a/atr/db/__init__.py b/atr/db/__init__.py
index 4b1b0aa..56a12e3 100644
--- a/atr/db/__init__.py
+++ b/atr/db/__init__.py
@@ -229,12 +229,12 @@ class Session(sqlalchemy.ext.asyncio.AsyncSession):
         full_name: Opt[str] = NOT_SET,
         is_podling: Opt[bool] = NOT_SET,
         committee_name: Opt[str] = NOT_SET,
-        vote_policy_id: Opt[int] = NOT_SET,
+        release_policy_id: Opt[int] = NOT_SET,
         _committee: bool = False,
         _releases: bool = False,
         _distribution_channels: bool = False,
         _super_project: bool = False,
-        _vote_policy: bool = False,
+        _release_policy: bool = False,
         _committee_public_signing_keys: bool = False,
     ) -> Query[models.Project]:
         query = sqlmodel.select(models.Project)
@@ -247,8 +247,8 @@ class Session(sqlalchemy.ext.asyncio.AsyncSession):
             query = query.where(models.Project.is_podling == is_podling)
         if is_defined(committee_name):
             query = query.where(models.Project.committee_name == 
committee_name)
-        if is_defined(vote_policy_id):
-            query = query.where(models.Project.vote_policy_id == 
vote_policy_id)
+        if is_defined(release_policy_id):
+            query = query.where(models.Project.release_policy_id == 
release_policy_id)
 
         if _committee:
             query = query.options(select_in_load(models.Project.committee))
@@ -258,8 +258,8 @@ class Session(sqlalchemy.ext.asyncio.AsyncSession):
             query = 
query.options(select_in_load(models.Project.distribution_channels))
         if _super_project:
             query = query.options(select_in_load(models.Project.super_project))
-        if _vote_policy:
-            query = query.options(select_in_load(models.Project.vote_policy))
+        if _release_policy:
+            query = 
query.options(select_in_load(models.Project.release_policy))
         if _committee_public_signing_keys:
             query = 
query.options(select_in_load_nested(models.Project.committee, 
models.Committee.public_signing_keys))
 
@@ -312,10 +312,10 @@ class Session(sqlalchemy.ext.asyncio.AsyncSession):
         version: Opt[str] = NOT_SET,
         revision: Opt[str] = NOT_SET,
         sboms: Opt[list[str]] = NOT_SET,
-        vote_policy_id: Opt[int] = NOT_SET,
+        release_policy_id: Opt[int] = NOT_SET,
         votes: Opt[list[models.VoteEntry]] = NOT_SET,
         _project: bool = False,
-        _vote_policy: bool = False,
+        _release_policy: bool = False,
         _committee: bool = False,
         _tasks: bool = False,
     ) -> Query[models.Release]:
@@ -339,15 +339,15 @@ class Session(sqlalchemy.ext.asyncio.AsyncSession):
             query = query.where(models.Release.revision == revision)
         if is_defined(sboms):
             query = query.where(models.Release.sboms == sboms)
-        if is_defined(vote_policy_id):
-            query = query.where(models.Release.vote_policy_id == 
vote_policy_id)
+        if is_defined(release_policy_id):
+            query = query.where(models.Release.release_policy_id == 
release_policy_id)
         if is_defined(votes):
             query = query.where(models.Release.votes == votes)
 
         if _project:
             query = query.options(select_in_load(models.Release.project))
-        if _vote_policy:
-            query = query.options(select_in_load(models.Release.vote_policy))
+        if _release_policy:
+            query = 
query.options(select_in_load(models.Release.release_policy))
         if _committee:
             query = 
query.options(select_in_load_nested(models.Release.project, 
models.Project.committee))
         if _tasks:
@@ -355,6 +355,36 @@ class Session(sqlalchemy.ext.asyncio.AsyncSession):
 
         return Query(self, query)
 
+    def release_policy(
+        self,
+        id: Opt[int] = NOT_SET,
+        mailto_addresses: Opt[list[str]] = NOT_SET,
+        manual_vote: Opt[bool] = NOT_SET,
+        min_hours: Opt[int] = NOT_SET,
+        release_checklist: Opt[str] = NOT_SET,
+        pause_for_rm: Opt[bool] = NOT_SET,
+        _project: bool = False,
+    ) -> Query[models.ReleasePolicy]:
+        query = sqlmodel.select(models.ReleasePolicy)
+
+        if is_defined(id):
+            query = query.where(models.ReleasePolicy.id == id)
+        if is_defined(mailto_addresses):
+            query = query.where(models.ReleasePolicy.mailto_addresses == 
mailto_addresses)
+        if is_defined(manual_vote):
+            query = query.where(models.ReleasePolicy.manual_vote == 
manual_vote)
+        if is_defined(min_hours):
+            query = query.where(models.ReleasePolicy.min_hours == min_hours)
+        if is_defined(release_checklist):
+            query = query.where(models.ReleasePolicy.release_checklist == 
release_checklist)
+        if is_defined(pause_for_rm):
+            query = query.where(models.ReleasePolicy.pause_for_rm == 
pause_for_rm)
+
+        if _project:
+            query = query.options(select_in_load(models.ReleasePolicy.project))
+
+        return Query(self, query)
+
     def ssh_key(
         self,
         fingerprint: Opt[str] = NOT_SET,
@@ -417,36 +447,6 @@ class Session(sqlalchemy.ext.asyncio.AsyncSession):
 
         return Query(self, query)
 
-    def vote_policy(
-        self,
-        id: Opt[int] = NOT_SET,
-        mailto_addresses: Opt[list[str]] = NOT_SET,
-        manual_vote: Opt[bool] = NOT_SET,
-        min_hours: Opt[int] = NOT_SET,
-        release_checklist: Opt[str] = NOT_SET,
-        pause_for_rm: Opt[bool] = NOT_SET,
-        _project: bool = False,
-    ) -> Query[models.VotePolicy]:
-        query = sqlmodel.select(models.VotePolicy)
-
-        if is_defined(id):
-            query = query.where(models.VotePolicy.id == id)
-        if is_defined(mailto_addresses):
-            query = query.where(models.VotePolicy.mailto_addresses == 
mailto_addresses)
-        if is_defined(manual_vote):
-            query = query.where(models.VotePolicy.manual_vote == manual_vote)
-        if is_defined(min_hours):
-            query = query.where(models.VotePolicy.min_hours == min_hours)
-        if is_defined(release_checklist):
-            query = query.where(models.VotePolicy.release_checklist == 
release_checklist)
-        if is_defined(pause_for_rm):
-            query = query.where(models.VotePolicy.pause_for_rm == pause_for_rm)
-
-        if _project:
-            query = query.options(select_in_load(models.VotePolicy.project))
-
-        return Query(self, query)
-
     def text_value(
         self,
         ns: Opt[str] = NOT_SET,
@@ -488,12 +488,12 @@ async def create_async_engine(app_config: 
type[config.AppConfig]) -> sqlalchemy.
     return engine
 
 
-async def get_project_vote_policy(data: Session, project_name: str) -> 
models.VotePolicy | None:
-    """Fetch the VotePolicy for a project."""
-    project = await data.project(name=project_name, _vote_policy=True).demand(
+async def get_project_release_policy(data: Session, project_name: str) -> 
models.ReleasePolicy | None:
+    """Fetch the ReleasePolicy for a project."""
+    project = await data.project(name=project_name, 
_release_policy=True).demand(
         RuntimeError(f"Project {project_name} not found")
     )
-    return project.vote_policy
+    return project.release_policy
 
 
 def init_database(app: base.QuartApp) -> None:
diff --git a/atr/db/models.py b/atr/db/models.py
index 66791cd..cee049d 100644
--- a/atr/db/models.py
+++ b/atr/db/models.py
@@ -100,7 +100,7 @@ class PublicSigningKey(sqlmodel.SQLModel, table=True):
     committees: list["Committee"] = 
sqlmodel.Relationship(back_populates="public_signing_keys", link_model=KeyLink)
 
 
-class VotePolicy(sqlmodel.SQLModel, table=True):
+class ReleasePolicy(sqlmodel.SQLModel, table=True):
     id: int = sqlmodel.Field(default=None, primary_key=True)
     mailto_addresses: list[str] = sqlmodel.Field(default_factory=list, 
sa_column=sqlalchemy.Column(sqlalchemy.JSON))
     manual_vote: bool = sqlmodel.Field(default=False)
@@ -110,8 +110,8 @@ class VotePolicy(sqlmodel.SQLModel, table=True):
     start_vote_template: str = sqlmodel.Field(default="")
     announce_release_template: str = sqlmodel.Field(default="")
 
-    # One-to-One: A vote policy is associated with a project
-    project: "Project" = sqlmodel.Relationship(back_populates="vote_policy")
+    # One-to-One: A release policy is associated with a project
+    project: "Project" = sqlmodel.Relationship(back_populates="release_policy")
 
 
 class Committee(sqlmodel.SQLModel, table=True):
@@ -177,9 +177,9 @@ class Project(sqlmodel.SQLModel, table=True):
     # One-to-many: A project can have multiple distribution channels, each 
channel belongs to one project
     distribution_channels: list["DistributionChannel"] = 
sqlmodel.Relationship(back_populates="project")
 
-    # Many-to-one: A Project can have one vote policy, a vote policy can be 
used by multiple entities
-    vote_policy_id: int | None = sqlmodel.Field(default=None, 
foreign_key="votepolicy.id", ondelete="CASCADE")
-    vote_policy: VotePolicy | None = sqlmodel.Relationship(
+    # Many-to-one: A Project can have one release policy, a release policy can 
be used by multiple entities
+    release_policy_id: int | None = sqlmodel.Field(default=None, 
foreign_key="releasepolicy.id", ondelete="CASCADE")
+    release_policy: ReleasePolicy | None = sqlmodel.Relationship(
         cascade_delete=True, sa_relationship_kwargs={"cascade": "all, 
delete-orphan", "single_parent": True}
     )
 
@@ -398,9 +398,9 @@ class Release(sqlmodel.SQLModel, table=True):
     revision: str | None = sqlmodel.Field(default=None, index=True)
     sboms: list[str] = sqlmodel.Field(default_factory=list, 
sa_column=sqlalchemy.Column(sqlalchemy.JSON))
 
-    # Many-to-one: A release can have one vote policy, a vote policy can be 
used by multiple releases
-    vote_policy_id: int | None = sqlmodel.Field(default=None, 
foreign_key="votepolicy.id")
-    vote_policy: VotePolicy | None = sqlmodel.Relationship(
+    # Many-to-one: A release can have one release policy, a release policy can 
be used by multiple releases
+    release_policy_id: int | None = sqlmodel.Field(default=None, 
foreign_key="releasepolicy.id")
+    release_policy: ReleasePolicy | None = sqlmodel.Relationship(
         cascade_delete=True, sa_relationship_kwargs={"cascade": "all, 
delete-orphan", "single_parent": True}
     )
 
diff --git a/atr/routes/projects.py b/atr/routes/projects.py
index 171c934..b3e79a9 100644
--- a/atr/routes/projects.py
+++ b/atr/routes/projects.py
@@ -40,9 +40,9 @@ class AddFormProtocol(Protocol):
     submit: wtforms.SubmitField
 
 
-class VotePolicyForm(util.QuartFormTyped):
+class ReleasePolicyForm(util.QuartFormTyped):
     """
-    A Form to create or edit a VotePolicy.
+    A Form to create or edit a ReleasePolicy.
 
     TODO: Currently only a single mailto_address is supported.
           see: 
https://stackoverflow.com/questions/49066046/append-entry-to-fieldlist-with-flask-wtforms-using-ajax
@@ -178,7 +178,7 @@ async def select(session: routes.CommitterSession) -> str:
 @routes.public("/projects/<name>")
 async def view(name: str) -> str:
     async with db.session() as data:
-        project = await data.project(name=name, 
_committee_public_signing_keys=True, _vote_policy=True).demand(
+        project = await data.project(name=name, 
_committee_public_signing_keys=True, _release_policy=True).demand(
             http.client.HTTPException(404)
         )
         return await quart.render_template(
@@ -194,70 +194,70 @@ async def view(name: str) -> str:
         )
 
 
[email protected]("/projects/<project_name>/vote-policy/add", methods=["GET", 
"POST"])
-async def vote_policy_add(session: routes.CommitterSession, project_name: str) 
-> response.Response | str:
[email protected]("/projects/<project_name>/release-policy/add", 
methods=["GET", "POST"])
+async def release_policy_add(session: routes.CommitterSession, project_name: 
str) -> response.Response | str:
     await session.check_access(project_name)
 
     uid = await util.get_asf_id_or_die()
 
     async with db.session() as data:
-        project = await data.project(name=project_name, _committee=True, 
_vote_policy=True).demand(
+        project = await data.project(name=project_name, _committee=True, 
_release_policy=True).demand(
             base.ASFQuartException(f"Project {project_name} not found", 
errorcode=404)
         )
 
         if not (user.is_committee_member(project.committee, uid) or 
user.is_admin(uid)):
             raise base.ASFQuartException(
-                f"You must be a committee member of {project.display_name} to 
submit a voting policy", errorcode=403
+                f"You must be a committee member of {project.display_name} to 
submit a release policy", errorcode=403
             )
 
-        form = await VotePolicyForm.create_form(data={"project_name": 
project.name})
+        form = await ReleasePolicyForm.create_form(data={"project_name": 
project.name})
 
         if form.mailto_addresses.entries[0].data is None:
             form.mailto_addresses.entries[0].data = 
f"dev@{util.unwrap(project.committee).name}.apache.org"
 
         if await form.validate_on_submit():
-            return await _add_voting_policy(project, form, data)
+            return await _add_release_policy(project, form, data)
 
     return await quart.render_template(
-        "vote-policy-add.html",
+        "release-policy-add.html",
         asf_id=uid,
         project=project,
         form=form,
     )
 
 
[email protected]("/projects/<project_name>/vote-policy/edit", methods=["GET", 
"POST"])
-async def vote_policy_edit(session: routes.CommitterSession, project_name: 
str) -> response.Response | str:
[email protected]("/projects/<project_name>/release-policy/edit", 
methods=["GET", "POST"])
+async def release_policy_edit(session: routes.CommitterSession, project_name: 
str) -> response.Response | str:
     await session.check_access(project_name)
 
     uid = await util.get_asf_id_or_die()
 
     async with db.session() as data:
-        project = await data.project(name=project_name, _committee=True, 
_vote_policy=True).demand(
+        project = await data.project(name=project_name, _committee=True, 
_release_policy=True).demand(
             base.ASFQuartException(f"Project {project_name} not found", 
errorcode=404)
         )
 
-        if project.vote_policy is None:
-            base.ASFQuartException(f"Vote Policy for project {project_name} 
does not exist", errorcode=404)
+        if project.release_policy is None:
+            base.ASFQuartException(f"Release Policy for project {project_name} 
does not exist", errorcode=404)
 
         if not (user.is_committee_member(project.committee, uid) or 
user.is_admin(uid)):
             raise base.ASFQuartException(
-                f"You must be a committee member of {project.display_name} to 
submit a voting policy", errorcode=403
+                f"You must be a committee member of {project.display_name} to 
submit a release policy", errorcode=403
             )
 
-        form = await VotePolicyForm.create_form()
+        form = await ReleasePolicyForm.create_form()
 
         # fill data
         if quart.request.method == "GET":
-            form.process(obj=project.vote_policy)
+            form.process(obj=project.release_policy)
             form.project_name.data = project.name
 
         if await form.validate_on_submit():
-            return await _edit_voting_policy(util.unwrap(project.vote_policy), 
form, data)
+            return await 
_edit_release_policy(util.unwrap(project.release_policy), form, data)
 
     # For GET requests, show the form
     return await quart.render_template(
-        "vote-policy-edit.html",
+        "release-policy-edit.html",
         asf_id=uid,
         project=project,
         form=form,
@@ -324,7 +324,7 @@ async def _add_project(form: AddFormProtocol, asf_id: str) 
-> response.Response:
             category=base_project.category,
             programming_languages=base_project.programming_languages,
             committee_name=base_project.committee_name,
-            vote_policy_id=base_project.vote_policy_id,
+            release_policy_id=base_project.release_policy_id,
             created=datetime.datetime.now(datetime.UTC),
             created_by=asf_id,
         )
@@ -335,10 +335,10 @@ async def _add_project(form: AddFormProtocol, asf_id: 
str) -> response.Response:
     return quart.redirect(util.as_url(view, name=new_project_label))
 
 
-async def _add_voting_policy(project: models.Project, form: VotePolicyForm, 
data: db.Session) -> response.Response:
+async def _add_release_policy(project: models.Project, form: 
ReleasePolicyForm, data: db.Session) -> response.Response:
     project_name = str(form.project_name.data)
 
-    vote_policy = models.VotePolicy(
+    release_policy = models.ReleasePolicy(
         mailto_addresses=[util.unwrap(form.mailto_addresses.entries[0].data)],
         manual_vote=form.manual_vote.data,
         min_hours=util.unwrap(form.min_hours.data),
@@ -348,25 +348,25 @@ async def _add_voting_policy(project: models.Project, 
form: VotePolicyForm, data
         pause_for_rm=form.pause_for_rm.data,
     )
 
-    vote_policy.project = project
-    data.add(vote_policy)
+    release_policy.project = project
+    data.add(release_policy)
     await data.commit()
 
     return quart.redirect(util.as_url(view, name=project_name))
 
 
-async def _edit_voting_policy(
-    vote_policy: models.VotePolicy, form: VotePolicyForm, data: db.Session
+async def _edit_release_policy(
+    release_policy: models.ReleasePolicy, form: ReleasePolicyForm, data: 
db.Session
 ) -> response.Response:
     project_name = str(form.project_name.data)
 
-    vote_policy.mailto_addresses = 
[util.unwrap(form.mailto_addresses.entries[0].data)]
-    vote_policy.manual_vote = form.manual_vote.data
-    vote_policy.min_hours = util.unwrap(form.min_hours.data)
-    vote_policy.release_checklist = util.unwrap(form.release_checklist.data)
-    vote_policy.start_vote_template = 
util.unwrap(form.start_vote_template.data)
-    vote_policy.announce_release_template = 
util.unwrap(form.announce_release_template.data)
-    vote_policy.pause_for_rm = form.pause_for_rm.data
+    release_policy.mailto_addresses = 
[util.unwrap(form.mailto_addresses.entries[0].data)]
+    release_policy.manual_vote = form.manual_vote.data
+    release_policy.min_hours = util.unwrap(form.min_hours.data)
+    release_policy.release_checklist = util.unwrap(form.release_checklist.data)
+    release_policy.start_vote_template = 
util.unwrap(form.start_vote_template.data)
+    release_policy.announce_release_template = 
util.unwrap(form.announce_release_template.data)
+    release_policy.pause_for_rm = form.pause_for_rm.data
     await data.commit()
 
     return quart.redirect(util.as_url(view, name=project_name))
diff --git a/atr/routes/voting.py b/atr/routes/voting.py
index b9a27f9..5d2526e 100644
--- a/atr/routes/voting.py
+++ b/atr/routes/voting.py
@@ -56,8 +56,8 @@ async def selected_revision(
         committee = util.unwrap(release.committee)
         permitted_recipients = util.permitted_recipients(session.uid)
 
-        if release.vote_policy:
-            min_hours = release.vote_policy.min_hours
+        if release.release_policy:
+            min_hours = release.release_policy.min_hours
         else:
             min_hours = 72
 
@@ -126,9 +126,9 @@ async def selected_revision(
             # TODO: We also need to store the duration of the vote
             # We can't allow resolution of the vote until the duration has 
elapsed
             # But we allow the user to specify in the form
-            # And yet we also have VotePolicy.min_hours
+            # And yet we also have ReleasePolicy.min_hours
             # Presumably this sets the default, and the form takes precedence?
-            # VotePolicy.min_hours can also be 0, though
+            # ReleasePolicy.min_hours can also be 0, though
 
             # Create a task for vote initiation
             task = models.Task(
diff --git a/atr/templates/project-view.html b/atr/templates/project-view.html
index c68286b..8a53a1f 100644
--- a/atr/templates/project-view.html
+++ b/atr/templates/project-view.html
@@ -117,24 +117,24 @@
 
   <div class="card mb-4">
     <div class="card-header bg-light d-flex justify-content-between 
align-items-center">
-      <h3 class="mb-0">Voting policy</h3>
+      <h3 class="mb-0">Release policy</h3>
       {% if not project.is_retired %}
-        {% if project.vote_policy and (is_committee_member or is_admin) %}
+        {% if project.release_policy and (is_committee_member or is_admin) %}
           <div>
             <a class="btn btn-primary btn-sm"
-               href="{{ as_url(routes.projects.vote_policy_edit, 
project_name=project.name) }}"><i class="bi bi-pencil-square"></i></a>
+               href="{{ as_url(routes.projects.release_policy_edit, 
project_name=project.name) }}"><i class="bi bi-pencil-square"></i></a>
           </div>
         {% elif (is_committee_member or is_admin) %}
           <div>
             <a class="btn btn-primary btn-sm"
-               href="{{ as_url(routes.projects.vote_policy_add, 
project_name=project.name) }}"><i class="bi bi-plus"></i></a>
+               href="{{ as_url(routes.projects.release_policy_add, 
project_name=project.name) }}"><i class="bi bi-plus"></i></a>
           </div>
         {% endif %}
       {% endif %}
     </div>
     <div class="card-body">
-      {% if project.vote_policy %}
-        {% set vp = project.vote_policy %}
+      {% if project.release_policy %}
+        {% set rp = project.release_policy %}
         <div class="card h-100 border">
           <div class="card-body">
             <table class="table mb-0">
diff --git a/atr/templates/vote-policy-add.html 
b/atr/templates/release-policy-add.html
similarity index 92%
rename from atr/templates/vote-policy-add.html
rename to atr/templates/release-policy-add.html
index 5a767cd..e115fd7 100644
--- a/atr/templates/vote-policy-add.html
+++ b/atr/templates/release-policy-add.html
@@ -18,6 +18,6 @@
     Use this form to create a voting policy for <strong>{{ 
project.display_name }}</strong>.
   </p>
 
-  {% include "vote-policy-form.html" %}
+  {% include "release-policy-form.html" %}
 
 {% endblock content %}
diff --git a/atr/templates/vote-policy-edit.html 
b/atr/templates/release-policy-edit.html
similarity index 92%
rename from atr/templates/vote-policy-edit.html
rename to atr/templates/release-policy-edit.html
index 678873d..eea1761 100644
--- a/atr/templates/vote-policy-edit.html
+++ b/atr/templates/release-policy-edit.html
@@ -19,6 +19,6 @@
     Use this form to edit the voting policy for <strong>{{ 
project.display_name }}</strong>.
   </p>
 
-  {% include "vote-policy-form.html" %}
+  {% include "release-policy-form.html" %}
 
 {% endblock content %}
diff --git a/atr/templates/vote-policy-form.html 
b/atr/templates/release-policy-form.html
similarity index 100%
rename from atr/templates/vote-policy-form.html
rename to atr/templates/release-policy-form.html


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

Reply via email to