This is an automated email from the ASF dual-hosted git repository.

gstein pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/steve.git

commit 2d8ae1cbe7d1dacbc126390c07443f9a5e7eb98c
Author: Greg Stein <[email protected]>
AuthorDate: Fri Feb 20 00:26:08 2026 -0600

    feat: add endpoints for setting election open and close dates
---
 v3/server/pages.py | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 53 insertions(+)

diff --git a/v3/server/pages.py b/v3/server/pages.py
index 46942f9..437bbbc 100644
--- a/v3/server/pages.py
+++ b/v3/server/pages.py
@@ -313,6 +313,59 @@ async def manage_stv_page(election, issue):
     return result
 
 
[email protected]('/do-set-open_at/<eid>')
[email protected]({R.committer})
+@load_election
+async def do_set_open_at_endpoint(election):
+    result = await basic_info()
+
+    ### check authz
+
+    data = await quart.request.get_json()
+    date_str = data.get('date')
+    if not date_str:
+        quart.abort(400, 'Missing date')
+
+    # Validate date (basic check)
+    try:
+        dt = datetime.datetime.fromisoformat(date_str).date()
+    except ValueError:
+        quart.abort(400, 'Invalid date format')
+
+    # Record the opening date.
+    election.set_open_at(dt)
+
+    _LOGGER.info(f'User[U:{result.uid}] set open_at for 
election[E:{election.eid}] to {date_str}')
+    return '', 204
+
+
[email protected]('/do-set-close_at/<eid>')
[email protected]({R.committer})
+@load_election
+async def do_set_close_at_endpoint(election):
+    # Similar to above, but for close_at
+    result = await basic_info()
+
+    ### check authz
+
+    data = await quart.request.get_json()
+    date_str = data.get('date')
+    if not date_str:
+        quart.abort(400, 'Missing date')
+
+    # Validate date (basic check)
+    try:
+        dt = datetime.datetime.fromisoformat(date_str).date()
+    except ValueError:
+        quart.abort(400, 'Invalid date format')
+
+    # Record the closing date.
+    election.set_close_at(dt)
+
+    _LOGGER.info(f'User[U:{result.uid}] set close_at for 
election[E:{election.eid}] to {date_str}')
+    return '', 204
+
+
 @APP.post('/do-create-election')
 @asfquart.auth.require({R.pmc_member})  ### need general solution
 async def do_create_endpoint():

Reply via email to