From 16e5241b2225ee84e31625a2b1b806a60472252f Mon Sep 17 00:00:00 2001 From: Frederick Muriuki Muriithi Date: Fri, 24 Jan 2025 11:36:57 -0600 Subject: Provide UI for editing a specific phenotype. --- uploader/phenotypes/views.py | 85 ++++++++++ uploader/static/css/styles.css | 7 + uploader/templates/phenotypes/edit-phenotype.html | 195 ++++++++++++++++++++++ 3 files changed, 287 insertions(+) create mode 100644 uploader/templates/phenotypes/edit-phenotype.html diff --git a/uploader/phenotypes/views.py b/uploader/phenotypes/views.py index 5ae9588..fe591f1 100644 --- a/uploader/phenotypes/views.py +++ b/uploader/phenotypes/views.py @@ -234,6 +234,7 @@ def view_phenotype(# pylint: disable=[unused-argument] species=species, population=population, dataset=dataset, + xref_id=xref_id, phenotype=phenotype, has_se=all(bool(item.get("error")) for item in phenotype["data"]), publish_data={ @@ -589,3 +590,87 @@ def review_job_data( job=job, summary=summary, activelink="add-phenotypes") + + + +@phenotypesbp.route( + "/populations//phenotypes/datasets" + "//phenotype//edit", + methods=["GET", "POST"]) +@require_login +@with_dataset( + 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( + species: dict, + population: dict, + dataset: dict, + xref_id: int, + **kwargs +): + """Edit the data for a particular phenotype.""" + def __render__(**kwargs): + processed_kwargs = { + **kwargs, + "privileges": (kwargs.get("privileges", tuple()) + ### For demo! Do not commit this part + + ("group:resource:edit-resource", + "group:resource:delete-resource",) + ### END: For demo! Do not commit this part + ) + } + return render_template( + "phenotypes/edit-phenotype.html", + species=species, + population=population, + dataset=dataset, + xref_id=xref_id, + families_with_se_and_n=_FAMILIES_WITH_SE_AND_N_, + **processed_kwargs, + activelink="edit-phenotype") + + with database_connection(app.config["SQL_URI"]) as conn: + def __fetch_phenotype__(privileges): + phenotype = phenotype_by_id(conn, + species["SpeciesId"], + population["Id"], + dataset["Id"], + xref_id) + if phenotype is None: + msg = ("Could not find the phenotype with cross-reference ID" + f" '{xref_id}' from dataset '{dataset['FullName']}' " + f" from the '{population['FullName']}' population of " + f" species '{species['FullName']}'.") + return Left({"privileges": privileges, "phenotype-error": msg}) + return {"privileges": privileges, "phenotype": phenotype} + + def __fetch_publication_data__(**kwargs): + pheno = kwargs["phenotype"] + return { + **kwargs, + "publication_data": phenotype_publication_data( + conn, pheno["Id"]) + } + + def __fail__(failure_object): + # process the object + return __render__(failure_object=failure_object) + + return oauth2_post( + "/auth/resource/phenotypes/individual/linked-resource", + json={ + "species_id": species["SpeciesId"], + "population_id": population["Id"], + "dataset_id": dataset["Id"], + "xref_id": xref_id + } + ).then( + lambda resource: tuple( + privilege["privilege_id"] for role in resource["roles"] + for privilege in role["privileges"]) + ).then( + __fetch_phenotype__ + ).then( + lambda args: __fetch_publication_data__(**args) + ).either(__fail__, lambda args: __render__(**args)) diff --git a/uploader/static/css/styles.css b/uploader/static/css/styles.css index 1c3e677..7bd51a9 100644 --- a/uploader/static/css/styles.css +++ b/uploader/static/css/styles.css @@ -136,11 +136,13 @@ input[type="submit"], .btn { .heading { border-bottom: solid #EEBB88; + text-transform: capitalize; } .subheading { padding: 1em 0 0.1em 0.5em; border-bottom: solid #88BBEE; + text-transform: capitalize; } form { @@ -154,6 +156,11 @@ form .form-control { background-color: #EAEAFF; } +.table-form-table thead { + background: #E5E5FF; +} + + .sidebar-content .card .card-title { font-size: 1.5em; } diff --git a/uploader/templates/phenotypes/edit-phenotype.html b/uploader/templates/phenotypes/edit-phenotype.html new file mode 100644 index 0000000..8b1642c --- /dev/null +++ b/uploader/templates/phenotypes/edit-phenotype.html @@ -0,0 +1,195 @@ +{%extends "phenotypes/base.html"%} +{%from "flash_messages.html" import flash_all_messages%} +{%from "populations/macro-display-population-card.html" import display_population_card%} + +{%block title%}Phenotypes{%endblock%} + +{%block pagetitle%}Phenotypes{%endblock%} + +{%block lvl4_breadcrumbs%} + +{%endblock%} + +{%block contents%} +{{flash_all_messages()}} + +
+

edit phenotype data

+

The two (2) forms provided in this page help you update the data for the + phenotypes, and the publication information for the phenotype, + respectively.

+
+ +
+

phenotype data

+
+
+ + + + + + + {%if population.Family in families_with_se_and_n%} + + + {%endif%} + + + + + {%for item in phenotype.data%} + + + + + {%if population.Family in families_with_se_and_n%} + + + {%endif%} + + {%endfor%} + +
#SampleValueStandard-ErrorNumber of Samples
{{loop.index}}{{item.StrainName}} + +
+
+
+ +
+
+
+ +
+

publication information

+

Use the form below to update the publication information for this + phenotype.

+
+
+ + + + Enter your publication's PubMed ID. + +
+ +
+ + + + Enter the authors. +
+ +
+ + + + Enter your publication's title. +
+ +
+ + + + Enter the abstract for your publication. +
+ +
+ + + + Enter the name of the journal where your work was published. +
+ +
+ + + + Enter the volume in the following format … +
+ +
+ + + + Enter the journal volume where your work was published. +
+ +
+ + + + Select the month when the work was published. + + This cannot be before, say 1600 and cannot be in the future! +
+ +
+ + + + Enter the year your work was published. + + This cannot be before, say 1600 and cannot be in the future! + +
+
+ +
+
+
+ +{%endblock%} + +{%block sidebarcontents%} +{{display_population_card(species, population)}} +{%endblock%} -- cgit v1.2.3