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 442fed8  Add API endpoints for public signing keys
442fed8 is described below

commit 442fed8fc8f2eb86c5bd80739244485a6c71e8f1
Author: Sean B. Palmer <[email protected]>
AuthorDate: Wed Jul 2 19:08:24 2025 +0100

    Add API endpoints for public signing keys
---
 atr/blueprints/api/api.py | 30 ++++++++++++++++++++++++++++++
 1 file changed, 30 insertions(+)

diff --git a/atr/blueprints/api/api.py b/atr/blueprints/api/api.py
index 311f172..6379984 100644
--- a/atr/blueprints/api/api.py
+++ b/atr/blueprints/api/api.py
@@ -58,6 +58,36 @@ async def committees() -> tuple[list[Mapping], int]:
         return [committee.model_dump() for committee in committees], 200
 
 
[email protected]("/keys")
+@quart_schema.validate_querystring(Pagination)
+async def public_keys(query_args: Pagination) -> quart.Response:
+    """List all public signing keys with pagination support."""
+    _pagination_args_validate(query_args)
+    via = models.validate_instrumented_attribute
+    async with db.session() as data:
+        statement = (
+            sqlmodel.select(models.PublicSigningKey)
+            .limit(query_args.limit)
+            .offset(query_args.offset)
+            .order_by(via(models.PublicSigningKey.fingerprint).asc())
+        )
+        paged_keys = (await data.execute(statement)).scalars().all()
+        count = (
+            await 
data.execute(sqlalchemy.select(sqlalchemy.func.count(via(models.PublicSigningKey.fingerprint))))
+        ).scalar_one()
+        result = {"data": [key.model_dump() for key in paged_keys], "count": 
count}
+        return quart.jsonify(result)
+
+
[email protected]("/keys/<fingerprint>")
+@quart_schema.validate_response(models.PublicSigningKey, 200)
+async def public_keys_fingerprint(fingerprint: str) -> tuple[Mapping, int]:
+    """Return a single public signing key by fingerprint."""
+    async with db.session() as data:
+        key = await 
data.public_signing_key(fingerprint=fingerprint.lower()).demand(exceptions.NotFound())
+        return key.model_dump(), 200
+
+
 @api.BLUEPRINT.route("/projects")
 @quart_schema.validate_response(list[models.Committee], 200)
 async def projects() -> tuple[list[Mapping], int]:


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

Reply via email to