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 6592fab  Add an API endpoint for SSH keys
6592fab is described below

commit 6592fab1cad94425ad8a01defc966547a27abbbc
Author: Sean B. Palmer <[email protected]>
AuthorDate: Wed Jul 2 19:47:40 2025 +0100

    Add an API endpoint for SSH keys
---
 atr/blueprints/api/api.py | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)

diff --git a/atr/blueprints/api/api.py b/atr/blueprints/api/api.py
index 6a337d4..25ab037 100644
--- a/atr/blueprints/api/api.py
+++ b/atr/blueprints/api/api.py
@@ -140,6 +140,7 @@ async def projects_name(name: str) -> tuple[Mapping, int]:
 @api.BLUEPRINT.route("/projects/<name>/releases")
 @quart_schema.validate_response(list[models.Release], 200)
 async def projects_name_releases(name: str) -> tuple[list[Mapping], int]:
+    """List all releases for a specific project."""
     async with db.session() as data:
         releases = await data.release(project_name=name).all()
         return [release.model_dump() for release in releases], 200
@@ -209,6 +210,28 @@ async def releases_project_version_revisions(project: str, 
version: str) -> tupl
         return [rev.model_dump() for rev in revisions], 200
 
 
[email protected]("/ssh-keys")
+@quart_schema.validate_querystring(Pagination)
+async def ssh_keys(query_args: Pagination) -> quart.Response:
+    """Paged list of developer SSH public keys."""
+    _pagination_args_validate(query_args)
+    via = models.validate_instrumented_attribute
+    async with db.session() as data:
+        statement = (
+            sqlmodel.select(models.SSHKey)
+            .limit(query_args.limit)
+            .offset(query_args.offset)
+            .order_by(via(models.SSHKey.fingerprint).asc())
+        )
+        paged_keys = (await data.execute(statement)).scalars().all()
+
+        count_stmt = 
sqlalchemy.select(sqlalchemy.func.count(via(models.SSHKey.fingerprint)))
+        count = (await data.execute(count_stmt)).scalar_one()
+
+        result = {"data": [key.model_dump() for key in paged_keys], "count": 
count}
+        return quart.jsonify(result)
+
+
 @api.BLUEPRINT.route("/tasks")
 @quart_schema.validate_querystring(Task)
 async def tasks(query_args: Task) -> quart.Response:


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

Reply via email to