This is an automated email from the ASF dual-hosted git repository.
sbp pushed a commit to branch sbp
in repository https://gitbox.apache.org/repos/asf/tooling-trusted-releases.git
The following commit(s) were added to refs/heads/sbp by this push:
new 355be9be Add a JSON response mode for when files are added
355be9be is described below
commit 355be9be784a803169bbac6dba227274283c42f8
Author: Sean B. Palmer <[email protected]>
AuthorDate: Mon Apr 6 20:09:37 2026 +0100
Add a JSON response mode for when files are added
---
atr/post/upload.py | 31 ++++++++++++++++++++++++++++---
1 file changed, 28 insertions(+), 3 deletions(-)
diff --git a/atr/post/upload.py b/atr/post/upload.py
index f6406116..731bb3cd 100644
--- a/atr/post/upload.py
+++ b/atr/post/upload.py
@@ -135,14 +135,15 @@ async def selected(
project_key: safe.ProjectKey,
version_key: safe.VersionKey,
upload_form: shared.upload.UploadForm,
-) -> web.WerkzeugResponse:
+) -> tuple[web.QuartResponse, int] | web.WerkzeugResponse:
"""
URL: /upload/<project_key>/<version_key>
"""
+ wants_json =
quart.request.accept_mimetypes.best_match(["application/json", "text/html"]) ==
"application/json"
match upload_form:
case shared.upload.AddFilesForm() as add_form:
- return await _add_files(session, add_form, project_key,
version_key)
+ return await _add_files(session, add_form, project_key,
version_key, wants_json=wants_json)
case shared.upload.SvnImportForm() as svn_form:
return await _svn_import(session, svn_form, project_key,
version_key)
@@ -202,7 +203,9 @@ async def _add_files(
add_form: shared.upload.AddFilesForm,
project_key: safe.ProjectKey,
version_key: safe.VersionKey,
-) -> web.WerkzeugResponse:
+ *,
+ wants_json: bool,
+) -> tuple[web.QuartResponse, int] | web.WerkzeugResponse:
try:
file_data = add_form.file_data
@@ -213,6 +216,8 @@ async def _add_files(
)
if creation_error is not None:
+ if wants_json:
+ return quart.jsonify(ok=False, message=creation_error), 400
await quart.flash(creation_error, "error")
return await session.redirect(
get.upload.selected,
@@ -220,7 +225,19 @@ async def _add_files(
version_key=version_key,
)
+ next_url = util.as_url(
+ get.compose.selected,
+ project_key=str(project_key),
+ version_key=str(version_key),
+ )
+
if was_quarantined:
+ if wants_json:
+ return quart.jsonify(
+ ok=True,
+ message="Upload received. Archive validation in progress.",
+ next_url=next_url,
+ ), 202
return await session.redirect(
get.compose.selected,
success="Upload received. Archive validation in progress.",
@@ -228,6 +245,12 @@ async def _add_files(
version_key=version_key,
)
+ if wants_json:
+ return quart.jsonify(
+ ok=True,
+ message=f"{util.plural(number_of_files, 'file')} added
successfully",
+ next_url=next_url,
+ ), 200
return await session.redirect(
get.compose.selected,
success=f"{util.plural(number_of_files, 'file')} added
successfully",
@@ -236,6 +259,8 @@ async def _add_files(
)
except Exception as e:
log.exception("Error adding file:")
+ if wants_json:
+ return quart.jsonify(ok=False, message=f"Error adding file:
{e!s}"), 500
await quart.flash(f"Error adding file: {e!s}", "error")
return await session.redirect(
get.upload.selected,
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]