aboutsummaryrefslogtreecommitdiff
path: root/qc_app
diff options
context:
space:
mode:
authorFrederick Muriuki Muriithi2024-07-01 14:59:32 -0500
committerFrederick Muriuki Muriithi2024-07-01 14:59:32 -0500
commita68fe177ae41f2e58a64b3f8dcf3f825d004eeca (patch)
tree076b90e1ff1b3efa9ffd2b42588fef24c6ce88ea /qc_app
parentf0434c14b1359f8decf712926e502bd98822b38c (diff)
downloadgn-uploader-a68fe177ae41f2e58a64b3f8dcf3f825d004eeca.tar.gz
Respond with JSON. Handle error messages on UI.
Diffstat (limited to 'qc_app')
-rw-r--r--qc_app/templates/rqtl2/upload-rqtl2-bundle-step-01.html15
-rw-r--r--qc_app/upload/rqtl2.py22
2 files changed, 33 insertions, 4 deletions
diff --git a/qc_app/templates/rqtl2/upload-rqtl2-bundle-step-01.html b/qc_app/templates/rqtl2/upload-rqtl2-bundle-step-01.html
index c6c79e5..07c240f 100644
--- a/qc_app/templates/rqtl2/upload-rqtl2-bundle-step-01.html
+++ b/qc_app/templates/rqtl2/upload-rqtl2-bundle-step-01.html
@@ -240,6 +240,21 @@
window.location.replace(uri);
}
});
+
+ r.on("error", (message, file) => {
+ filename = (file.webkitRelativePath
+ || file.relativePath
+ || file.fileName
+ || file.name);
+ jsonmsg = JSON.parse(message);
+ alert("There was an error while uploading your file '"
+ + filename
+ + "'. The error message was:\n\n\t"
+ + jsonmsg.error
+ + " ("
+ + jsonmsg.statuscode
+ + "): " + jsonmsg.message);
+ })
} else {
setup_upload_handlers(
"frm-upload-rqtl2-bundle", make_data_uploader(
diff --git a/qc_app/upload/rqtl2.py b/qc_app/upload/rqtl2.py
index 31d5a9d..e691636 100644
--- a/qc_app/upload/rqtl2.py
+++ b/qc_app/upload/rqtl2.py
@@ -13,11 +13,11 @@ import MySQLdb as mdb
from redis import Redis
from MySQLdb.cursors import DictCursor
from werkzeug.utils import secure_filename
-from werkzeug.exceptions import NotFound, BadRequest
from flask import (
flash,
escape,
request,
+ jsonify,
url_for,
redirect,
Response,
@@ -254,13 +254,21 @@ def upload_rqtl2_bundle_chunked_get(# pylint: disable=["unused-argument"]
filename = request.args.get("resumableFilename", type=str) or ""
chunk = request.args.get("resumableChunkNumber", type=int) or 0
if not(fileid or filename or chunk):
- raise BadRequest("At least one required query parameter is missing.")
+ return jsonify({
+ "message": "At least one required query parameter is missing.",
+ "error": "BadRequest",
+ "statuscode": 400
+ }), 400
if Path(chunks_directory(fileid),
chunk_name(filename, chunk)).exists():
return "OK"
- raise NotFound(description=f"Chunk {chunk} was not found.")
+ return jsonify({
+ "message": f"Chunk {chunk} was not found.",
+ "error": "NotFound",
+ "statuscode": 404
+ }), 404
def __merge_chunks__(targetfile: Path, chunkpaths: tuple[Path, ...]) -> Path:
@@ -294,7 +302,13 @@ def upload_rqtl2_bundle_chunked_post(species_id: int, population_id: int):
_targetfile = Path(app.config["UPLOAD_FOLDER"], _fileid)
if _targetfile.exists():
- raise BadRequest("The file has already been uploaded.")
+ return jsonify({
+ "message": (
+ "A file with a similar unique identifier has previously been "
+ "uploaded and possibly is/has being/been processed."),
+ "error": "BadRequest",
+ "statuscode": 400
+ }), 400
# save chunk data
chunks_directory(_fileid).mkdir(exist_ok=True)