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]