aboutsummaryrefslogtreecommitdiff
path: root/uploader/phenotypes/views.py
diff options
context:
space:
mode:
Diffstat (limited to 'uploader/phenotypes/views.py')
-rw-r--r--uploader/phenotypes/views.py67
1 files changed, 46 insertions, 21 deletions
diff --git a/uploader/phenotypes/views.py b/uploader/phenotypes/views.py
index d283e47..ddec54c 100644
--- a/uploader/phenotypes/views.py
+++ b/uploader/phenotypes/views.py
@@ -3,12 +3,14 @@ import sys
import uuid
import json
import datetime
+from typing import Any
from pathlib import Path
from zipfile import ZipFile
from functools import wraps, reduce
from logging import INFO, ERROR, DEBUG, FATAL, CRITICAL, WARNING
from redis import Redis
+from pymonad.either import Left
from requests.models import Response
from MySQLdb.cursors import DictCursor
from gn_libs.mysqldb import database_connection
@@ -195,12 +197,10 @@ def view_dataset(# pylint: disable=[unused-argument]
phenotype_count=phenotypes_count(
conn, population["Id"], dataset["Id"]),
phenotypes=enumerate_sequence(
- dataset_phenotypes(conn,
- population["Id"],
- dataset["Id"],
- offset=start_at,
- limit=count),
- start=start_at+1),
+ dataset_phenotypes(
+ conn,
+ population["Id"],
+ dataset["Id"])),
start_from=start_at,
count=count,
activelink="view-dataset")
@@ -229,6 +229,11 @@ def view_phenotype(# pylint: disable=[unused-argument]
population["Id"],
dataset["Id"],
xref_id)
+ def __non_empty__(value) -> bool:
+ if isinstance(value, str):
+ return value.strip() != ""
+ return bool(value)
+
return render_template(
"phenotypes/view-phenotype.html",
species=species,
@@ -236,14 +241,13 @@ def view_phenotype(# pylint: disable=[unused-argument]
dataset=dataset,
xref_id=xref_id,
phenotype=phenotype,
- has_se=all(bool(item.get("error")) for item in phenotype["data"]),
+ has_se=any(bool(item.get("error")) for item in phenotype["data"]),
publish_data={
key.replace("_", " "): val
for key,val in
(phenotype_publication_data(conn, phenotype["Id"]) or {}).items()
if (key in ("PubMed_ID", "Authors", "Title", "Journal")
- and val is not None
- and val.strip() != "")
+ and __non_empty__(val))
},
privileges=(privileges
### For demo! Do not commit this part
@@ -520,7 +524,7 @@ def job_status(
@phenotypesbp.route(
"<int:species_id>/populations/<int:population_id>/phenotypes/datasets"
- "/<int:dataset_id>/review-job/<uuid:job_id>",
+ "/<int:dataset_id>/job/<uuid:job_id>/review",
methods=["GET"])
@require_login
@with_dataset(
@@ -548,11 +552,12 @@ def review_job_data(
filetype: (by_type.get(filetype, tuple())
+ ({"filename": item[0], **item[1]},))
}
- metadata = reduce(__metadata_by_type__,
- (jobs.job_files_metadata(
- rconn, jobs.jobsnamespace(), job['jobid'])
- if job else {}).items(),
- {})
+ metadata: dict[str, Any] = reduce(
+ __metadata_by_type__,
+ (jobs.job_files_metadata(
+ rconn, jobs.jobsnamespace(), job['jobid'])
+ if job else {}).items(),
+ {})
def __desc__(filetype):
match filetype:
@@ -593,6 +598,7 @@ def review_job_data(
def update_phenotype_metadata(conn, metadata: dict):
+ """Update a phenotype's basic metadata values."""
with conn.cursor(cursorclass=DictCursor) as cursor:
cursor.execute("SELECT * FROM Phenotype WHERE Id=%(phenotype-id)s",
metadata)
@@ -623,6 +629,7 @@ def update_phenotype_metadata(conn, metadata: dict):
def update_phenotype_values(conn, values):
+ """Update a phenotype's data values."""
with conn.cursor() as cursor:
cursor.executemany(
"UPDATE PublishData SET value=%(new)s "
@@ -637,6 +644,7 @@ def update_phenotype_values(conn, values):
def update_phenotype_se(conn, serrs):
+ """Update a phenotype's standard-error values."""
with conn.cursor() as cursor:
cursor.executemany(
"INSERT INTO PublishSE(DataId, StrainId, error) "
@@ -652,6 +660,7 @@ def update_phenotype_se(conn, serrs):
def update_phenotype_n(conn, counts):
+ """Update a phenotype's strain counts."""
with conn.cursor() as cursor:
cursor.executemany(
"INSERT INTO NStrain(DataId, StrainId, count) "
@@ -680,9 +689,25 @@ def update_phenotype_data(conn, data: dict):
def __separate_items__(acc, row):
key, val = row
- return ({**acc[0], key: {**val["value"], "changed?": (not val["value"]["new"] == val["value"]["original"])}},
- {**acc[1], key: {**val["se"] , "changed?": (not val["se"]["new"] == val["se"]["original"])}},
- {**acc[2], key: {**val["n"] , "changed?": (not val["n"]["new"] == val["n"]["original"])}})
+ return ({
+ **acc[0],
+ key: {
+ **val["value"],
+ "changed?": (not val["value"]["new"] == val["value"]["original"])
+ }
+ }, {
+ **acc[1],
+ key: {
+ **val["se"],
+ "changed?": (not val["se"]["new"] == val["se"]["original"])
+ }
+ },{
+ **acc[2],
+ key: {
+ **val["n"],
+ "changed?": (not val["n"]["new"] == val["n"]["original"])
+ }
+ })
values, serrs, counts = tuple(
tuple({
@@ -691,8 +716,8 @@ def update_phenotype_data(conn, data: dict):
"new": row[1]["new"]
} for row in item)
for item in (
- filter(lambda val: val[1]["changed?"], item.items())
- for item in reduce(
+ filter(lambda val: val[1]["changed?"], item.items())# type: ignore[arg-type]
+ for item in reduce(# type: ignore[var-annotated]
__separate_items__,
reduce(__organise_by_dataid_and_strainid__,
data.items(),
@@ -713,7 +738,7 @@ def update_phenotype_data(conn, data: dict):
species_redirect_uri="species.populations.phenotypes.index",
population_redirect_uri="species.populations.phenotypes.select_population",
redirect_uri="species.populations.phenotypes.list_datasets")
-def edit_phenotype_data(
+def edit_phenotype_data(# pylint: disable=[unused-argument]
species: dict,
population: dict,
dataset: dict,