aboutsummaryrefslogtreecommitdiff
path: root/uploader/phenotypes
diff options
context:
space:
mode:
authorFrederick Muriuki Muriithi2025-01-21 13:02:17 -0600
committerFrederick Muriuki Muriithi2025-01-21 13:02:17 -0600
commit800615784d5c7267d0743575f020d21c03e6c491 (patch)
tree6837ef99efc63cb28b0767886f7d32a875c858a2 /uploader/phenotypes
parente052f90b31f061300bacca6e5b54e504106af30d (diff)
downloadgn-uploader-800615784d5c7267d0743575f020d21c03e6c491.tar.gz
Process form contents into a zip bundle.
Diffstat (limited to 'uploader/phenotypes')
-rw-r--r--uploader/phenotypes/views.py47
1 files changed, 44 insertions, 3 deletions
diff --git a/uploader/phenotypes/views.py b/uploader/phenotypes/views.py
index f10ba09..8ae3ae4 100644
--- a/uploader/phenotypes/views.py
+++ b/uploader/phenotypes/views.py
@@ -369,12 +369,53 @@ def process_phenotypes_rqtl2_bundle(
job_id=str(_job["jobid"])))
-def process_phenotypes_individual_files(rconn, species, population, dataset):
+def process_phenotypes_individual_files(rconn, species, population, dataset, error_uri):
"""Process the uploaded individual files."""
- ## Handle huge file uploads here...
+ form = request.form
+ cdata = {
+ "sep": form["file-separator"],
+ "comment.char": form["file-comment-character"],
+ "na.strings": form["file-na"].split(" "),
+ }
+ with ZipFile(
+ Path(app.config["UPLOAD_FOLDER"],
+ f"{str(uuid.uuid4()).replace('-', '')}.zip"),
+ mode="w"
+ ) as zfile:
+ for rqtlkey, formkey in (("phenocovar", "phenotype-descriptions"),
+ ("pheno", "phenotype-data"),
+ ("phenose", "phenotype-se"),
+ ("phenonum", "phenotype-n")):
+ if form.get("resumable-upload", False):
+ # Chunked upload of large files was used
+ filedata = json.loads(form[formkey])
+ zfile.write(
+ Path(app.config["UPLOAD_FOLDER"], filedata["uploaded-file"]),
+ arcname=filedata["original-name"])
+ cdata[rqtlkey] = cdata.get(rqtlkey, []) + [filedata["original-name"]]
+ else:
+ # TODO: Check this path: fix any bugs.
+ _sentfile = request.files[formkey]
+ if not bool(_sentfile):
+ flash(f"Expected file ('{formkey}') was not provided.",
+ "alert-danger")
+ return error_uri
+
+ filepath = save_file(
+ _sentfile, Path(app.config["UPLOAD_FOLDER"]))
+ zfile.write(
+ Path(app.config["UPLOAD_FOLDER"], filepath),
+ arcname=filepath.name)
+ cdata[rqtlkey] = cdata.get(rqtlkey, []) + [filepath.name]
+
+ zfile.writestr("control_data.json", data=json.dumps(cdata, indent=2))
+
## Convert files and settings to R/qtl2 bundle
## Use same processing as R/qtl2 bundle (after some refactoring)
- raise NotImplementedError("Implement this!")
+ print(f"FORM: {request.form}")
+ print(f"FILES: {request.files}")
+ print(f"CDATA: {cdata}")
+ return "Would process individual files…"
@phenotypesbp.route(