aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBonfaceKilz2022-03-14 17:52:55 +0300
committerBonfaceKilz2022-03-14 18:14:42 +0300
commit3491702ea309aa7cd897c07d6ce8e87eb51cbf46 (patch)
tree09389baf2ab6cb0f6da1f0dc332f2b1f74848346
parent00ddaebee38fef8a2ff633a937cf06aab3e3db34 (diff)
downloadgenenetwork2-3491702ea309aa7cd897c07d6ce8e87eb51cbf46.tar.gz
Warn when someone uploads a csv file that has columns not in the db
* wqflask/wqflask/metadata_edits.py: Import "extract_invalid_csv_headers" and "get_allowable_sampledata_headers". (display_phenotype_metadata): Pass the allowable headers to the template. (update_phenotype): If a user uploads data with a column header that's not in the db, don't upload the file, and send a warning message. * wqflask/wqflask/templates/edit_phenotype.html: List the allowable headers in the template.
-rw-r--r--wqflask/wqflask/metadata_edits.py19
-rw-r--r--wqflask/wqflask/templates/edit_phenotype.html5
2 files changed, 22 insertions, 2 deletions
diff --git a/wqflask/wqflask/metadata_edits.py b/wqflask/wqflask/metadata_edits.py
index 49205b76..30acf4d4 100644
--- a/wqflask/wqflask/metadata_edits.py
+++ b/wqflask/wqflask/metadata_edits.py
@@ -28,6 +28,8 @@ from gn3.authentication import AdminRole
from gn3.authentication import get_highest_user_access_role
from gn3.csvcmp import create_dirs_if_not_exists
from gn3.csvcmp import csv_diff
+from gn3.csvcmp import extract_invalid_csv_headers
+from gn3.csvcmp import get_allowable_sampledata_headers
from gn3.csvcmp import remove_insignificant_edits
from gn3.db import diff_from_dict
from gn3.db import fetchall
@@ -40,10 +42,10 @@ from gn3.db.phenotypes import Probeset
from gn3.db.phenotypes import Publication
from gn3.db.phenotypes import PublishXRef
from gn3.db.phenotypes import probeset_mapping
-from gn3.db.sample_data import get_trait_csv_sample_data
-from gn3.db.sample_data import update_sample_data
from gn3.db.sample_data import delete_sample_data
+from gn3.db.sample_data import get_trait_csv_sample_data
from gn3.db.sample_data import insert_sample_data
+from gn3.db.sample_data import update_sample_data
metadata_edit = Blueprint('metadata_edit', __name__)
@@ -187,6 +189,7 @@ def display_phenotype_metadata(dataset_id: str, name: str):
publication=_d.get("publication"),
dataset_id=dataset_id,
resource_id=request.args.get("resource-id"),
+ headers=get_allowable_sampledata_headers(conn),
version=os.environ.get("GN_VERSION"),
)
@@ -239,6 +242,18 @@ def update_phenotype(dataset_id: str, name: str):
delta_csv=(delta_csv := file_.read().decode()),
tmp_dir=TMPDIR),
epsilon=0.001)
+ headers = get_allowable_sampledata_headers(conn)
+ invalid_headers = extract_invalid_csv_headers(
+ allowed_headers=headers,
+ csv_text=delta_csv)
+ if invalid_headers:
+ flash("You have invalid headers: "
+ f"""{', '.join(invalid_headers)}. Valid headers """
+ f"""are: {', '.join(headers)}""",
+ "warning")
+ return redirect(
+ f"/datasets/{dataset_id}/traits/{name}"
+ f"?resource-id={request.args.get('resource-id')}")
# Edge case where the csv file has not been edited!
if not any(diff_data.values()):
flash("You have not modified the csv file you downloaded!",
diff --git a/wqflask/wqflask/templates/edit_phenotype.html b/wqflask/wqflask/templates/edit_phenotype.html
index 76d15043..5458247e 100644
--- a/wqflask/wqflask/templates/edit_phenotype.html
+++ b/wqflask/wqflask/templates/edit_phenotype.html
@@ -224,6 +224,11 @@
<div class="form-group">
<input type = "file" class="col-sm-4 control-label" name = "file" />
</div>
+ <div class="col-xs-6">
+ <p>
+ Note: Current allowable sample headers are: {{ ', '.join(headers) }}
+ </p>
+ </div>
<div class="controls center-block" style="width: max-content;">
<input name="inbred-set-id" class="changed" type="hidden" value="{{ publish_xref.inbred_set_id }}"/>
<input name="phenotype-id" class="changed" type="hidden" value="{{ publish_xref.phenotype_id }}"/>