aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBonfaceKilz2021-11-25 21:02:44 +0300
committerBonfaceKilz2021-11-25 21:08:54 +0300
commiteaf63573e1a78bf9e5c1051875f4e2c10d1dcb77 (patch)
tree3f9d75ad23fbacd40837e4c9989d4529223c1199
parent4d0fe8810b695ae883f02cad9ff4fc5716d8d3f0 (diff)
downloadgenenetwork2-eaf63573e1a78bf9e5c1051875f4e2c10d1dcb77.tar.gz
wqflask: metadata_edits: Support deletions and insertions from csv
-rw-r--r--wqflask/wqflask/metadata_edits.py95
1 files changed, 55 insertions, 40 deletions
diff --git a/wqflask/wqflask/metadata_edits.py b/wqflask/wqflask/metadata_edits.py
index 76dd50d9..fa6cfea3 100644
--- a/wqflask/wqflask/metadata_edits.py
+++ b/wqflask/wqflask/metadata_edits.py
@@ -45,6 +45,8 @@ from gn3.db.phenotypes import PublishXRef
from gn3.db.phenotypes import probeset_mapping
from gn3.db.traits import get_trait_csv_sample_data
from gn3.db.traits import update_sample_data
+from gn3.db.traits import delete_sample_data
+from gn3.db.traits import insert_sample_data
metadata_edit = Blueprint('metadata_edit', __name__)
@@ -249,23 +251,11 @@ def update_phenotype(dataset_id: str, name: str):
TMPDIR, "sample-data/updated/",
f"{_file_name}.csv.uploaded"))
file_.save(new_file_name)
- publishdata_id = ""
- lines = []
- split_point = ""
- with open(new_file_name, "r") as f:
- lines = f.read()
- for line in lines.split("\n"):
- if "# Publish Data Id:" in line:
- split_point = line
- publishdata_id = re.findall(r'\b\d+\b', line)[0]
- break
- with open(new_file_name, "w") as f:
- f.write(lines.split(f"{split_point}\n")[-1].strip())
- csv_ = get_trait_csv_sample_data(conn=conn,
- trait_name=str(name),
- phenotype_id=str(phenotype_id))
with open(uploaded_file_name, "w") as f_:
- f_.write(csv_.split(str(publishdata_id))[-1].strip())
+ f_.write(get_trait_csv_sample_data(
+ conn=conn,
+ trait_name=str(name),
+ phenotype_id=str(phenotype_id)))
r = run_cmd(cmd=("csvdiff "
f"'{uploaded_file_name}' '{new_file_name}' "
"--format json"))
@@ -274,9 +264,9 @@ def update_phenotype(dataset_id: str, name: str):
with open(diff_output, "w") as f:
dict_ = json.loads(r.get("output"))
dict_.update({
+ "trait_name": str(name),
+ "phenotype_id": str(phenotype_id),
"author": author,
- "publishdata_id": publishdata_id,
- "dataset_id": name,
"timestamp": datetime.datetime.now().strftime(
"%Y-%m-%d %H:%M:%S")
})
@@ -324,11 +314,16 @@ def update_phenotype(dataset_id: str, name: str):
k: data_.get(f"old_{k}") for k, v in publication_.items()
if v is not None}, new=publication_)})
if diff_data:
- diff_data.update({"dataset_id": name})
- diff_data.update({"resource_id": request.args.get('resource-id')})
- diff_data.update({"author": author})
- diff_data.update({"timestamp": datetime.datetime.now().strftime(
- "%Y-%m-%d %H:%M:%S")})
+ diff_data.update({
+ "phenotype_id": str(phenotype_id),
+ "dataset_id": name,
+ "resource_id": request.args.get('resource-id'),
+ "author": author,
+ "timestamp": (datetime
+ .datetime
+ .now()
+ .strftime("%Y-%m-%d %H:%M:%S")),
+ })
insert(conn,
table="metadata_audit",
data=MetadataAudit(dataset_id=name,
@@ -473,34 +468,54 @@ def approve_data(resource_id:str, file_name: str):
with open(os.path.join(f"{TMPDIR}/sample-data/diffs",
file_name), 'r') as myfile:
sample_data = json.load(myfile)
- modifications = [d for d in sample_data.get("Modifications")]
- for modification in modifications:
+ for modification in (
+ modifications := [d for d in sample_data.get("Modifications")]):
if modification.get("Current"):
- (strain_id,
- strain_name,
+ (strain_name,
value, se, count) = modification.get("Current").split(",")
update_sample_data(
conn=conn,
+ trait_name=sample_data.get("trait_name"),
strain_name=strain_name,
- strain_id=int(strain_id),
- publish_data_id=int(sample_data.get("publishdata_id")),
+ phenotype_id=int(sample_data.get("phenotype_id")),
value=value,
error=se,
- count=count
- )
- insert(conn,
- table="metadata_audit",
- data=MetadataAudit(
- dataset_id=sample_data.get("dataset_id"),
- editor=sample_data.get("author"),
- json_data=json.dumps(sample_data)))
- if modifications:
+ count=count)
+ for deletion in (deletions := [d for d in sample_data.get("Deletions")]):
+ strain_name, _, _, _ = deletion.split(",")
+ delete_sample_data(
+ conn=conn,
+ trait_name=sample_data.get("trait_name"),
+ strain_name=strain_name,
+ phenotype_id=int(sample_data.get("phenotype_id")))
+ for insertion in (
+ insertions := [d for d in sample_data.get("Additions")]):
+ (strain_name,
+ value, se, count) = insertion.split(",")
+ insert_sample_data(
+ conn=conn,
+ trait_name=sample_data.get("trait_name"),
+ strain_name=strain_name,
+ phenotype_id=int(sample_data.get("phenotype_id")),
+ value=value,
+ error=se,
+ count=count)
+
+ if any([any(modifications), any(deletions), any(insertions)]):
+ insert(conn,
+ table="metadata_audit",
+ data=MetadataAudit(
+ dataset_id=sample_data.get("trait_name"),
+ editor=sample_data.get("author"),
+ json_data=json.dumps(sample_data)))
# Once data is approved, rename it!
os.rename(os.path.join(f"{TMPDIR}/sample-data/diffs", file_name),
os.path.join(f"{TMPDIR}/sample-data/diffs",
f"{file_name}.approved"))
- flash((f"Just updated data from: {file_name}; {len(modifications)} "
- "row(s) modified!"),
+ flash((f"Just updated data from: {file_name};\n"
+ f"# Modifications: {len(modifications)}; "
+ f"# Additions: {len(insertions)}; "
+ f"# Deletions: {len(deletions)}"),
"success")
return redirect(url_for('metadata_edit.list_diffs'))