about summary refs log tree commit diff
diff options
context:
space:
mode:
authorFrederick Muriuki Muriithi2024-07-22 11:55:57 -0500
committerFrederick Muriuki Muriithi2024-07-22 12:01:15 -0500
commitde9e1b9fe37928b864bea28b408de6c14d04526b (patch)
tree2c1822d28cfbe0d8146605665272070527973fa1
parentd082f2e46f2699a486e7b6f75911b92ce176e87c (diff)
downloadgn-uploader-de9e1b9fe37928b864bea28b408de6c14d04526b.tar.gz
Handle generic errors for chunked uploads better.
-rw-r--r--qc_app/upload/rqtl2.py44
1 files changed, 27 insertions, 17 deletions
diff --git a/qc_app/upload/rqtl2.py b/qc_app/upload/rqtl2.py
index e691636..51d8321 100644
--- a/qc_app/upload/rqtl2.py
+++ b/qc_app/upload/rqtl2.py
@@ -310,23 +310,33 @@ def upload_rqtl2_bundle_chunked_post(species_id: int, population_id: int):
             "statuscode": 400
         }), 400
 
-    # save chunk data
-    chunks_directory(_fileid).mkdir(exist_ok=True)
-    request.files["file"].save(Path(chunks_directory(_fileid),
-                                    chunk_name(_uploadfilename, _chunk)))
-
-    # Check whether upload is complete
-    chunkpaths = tuple(
-        Path(chunks_directory(_fileid), chunk_name(_uploadfilename, _achunk))
-        for _achunk in range(1, _totalchunks+1))
-    if all(_file.exists() for _file in chunkpaths):
-        # merge_files and clean up chunks
-        __merge_chunks__(_targetfile, chunkpaths)
-        chunks_directory(_fileid).rmdir()
-        jobid = trigger_rqtl2_bundle_qc(
-            species_id, population_id, _targetfile, _uploadfilename)
-        return url_for(
-            "upload.rqtl2.rqtl2_bundle_qc_status", jobid=jobid)
+    try:
+        # save chunk data
+        chunks_directory(_fileid).mkdir(exist_ok=True, parents=True)
+        request.files["file"].save(Path(chunks_directory(_fileid),
+                                        chunk_name(_uploadfilename, _chunk)))
+
+        # Check whether upload is complete
+        chunkpaths = tuple(
+            Path(chunks_directory(_fileid), chunk_name(_uploadfilename, _achunk))
+            for _achunk in range(1, _totalchunks+1))
+        if all(_file.exists() for _file in chunkpaths):
+            # merge_files and clean up chunks
+            __merge_chunks__(_targetfile, chunkpaths)
+            chunks_directory(_fileid).rmdir()
+            jobid = trigger_rqtl2_bundle_qc(
+                species_id, population_id, _targetfile, _uploadfilename)
+            return url_for(
+                "upload.rqtl2.rqtl2_bundle_qc_status", jobid=jobid)
+    except Exception as exc:# pylint: disable=[broad-except]
+        msg = "Error processing uploaded file chunks."
+        app.logger.error(msg, exc_info=True, stack_info=True)
+        return jsonify({
+            "message": msg,
+            "error": type(exc).__name__,
+            "error-description": " ".join(str(arg) for arg in exc.args),
+            "error-trace": traceback.format_exception(exc)
+        }), 500
 
     return "OK"