about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--uploader/genotypes/views.py63
-rw-r--r--uploader/templates/genotypes/create-dataset.html10
-rw-r--r--uploader/templates/genotypes/list-genotypes.html73
-rw-r--r--uploader/templates/genotypes/select-population.html25
4 files changed, 101 insertions, 70 deletions
diff --git a/uploader/genotypes/views.py b/uploader/genotypes/views.py
index 0d8f983..3fa2131 100644
--- a/uploader/genotypes/views.py
+++ b/uploader/genotypes/views.py
@@ -1,5 +1,8 @@
 """Views for the genotypes."""
+import logging
+
 from MySQLdb.cursors import DictCursor
+from pymonad.either import Left, Right, Either
 from gn_libs.mysqldb import database_connection
 from flask import (flash,
                    request,
@@ -25,6 +28,7 @@ from .models import (genotype_markers,
                      genotype_markers_count,
                      genocode_by_population)
 
+logger = logging.getLogger(__name__)
 genotypesbp = Blueprint("genotypes", __name__)
 render_template = make_template_renderer("genotypes")
 
@@ -126,21 +130,28 @@ def view_dataset(species_id: int, population_id: int, dataset_id: int):
                  redirect_uri="species.populations.list_species_populations")
 def create_dataset(species: dict, population: dict, **kwargs):# pylint: disable=[unused-argument]
     """Create a genotype dataset."""
+    if request.method == "GET":
+        return render_template("genotypes/create-dataset.html",
+                               species=species,
+                               population=population,
+                               activelink="create-dataset")
+
     with (database_connection(app.config["SQL_URI"]) as conn,
           conn.cursor(cursorclass=DictCursor) as cursor):
-        if request.method == "GET":
-            return render_template("genotypes/create-dataset.html",
-                                   species=species,
-                                   population=population,
-                                   activelink="create-dataset")
-
-        form = request.form
-        new_dataset = save_new_dataset(
-            cursor,
-            population["Id"],
-            form["geno-dataset-name"],
-            form["geno-dataset-fullname"],
-            form["geno-dataset-shortname"])
+
+        def __save_dataset__() -> Either:
+            form = request.form
+            try:
+                return Right(save_new_dataset(
+                    cursor,
+                    population["Id"],
+                    form["geno-dataset-name"],
+                    form["geno-dataset-fullname"],
+                    form["geno-dataset-shortname"]))
+            except Exception:
+                msg = "Error adding new Genotype dataset to database."
+                logger.error(msg, exc_info=True)
+                return Left(Exception(msg))
 
         def __success__(_success):
             flash("Successfully created genotype dataset.", "alert-success")
@@ -149,18 +160,20 @@ def create_dataset(species: dict, population: dict, **kwargs):# pylint: disable=
                 species_id=species["SpeciesId"],
                 population_id=population["Id"]))
 
-        return oauth2_post(
-            "auth/resource/genotypes/create",
-            json={
-                **dict(request.form),
-                "species_id": species["SpeciesId"],
-                "population_id": population["Id"],
-                "dataset_id": new_dataset["Id"],
-                "dataset_name": form["geno-dataset-name"],
-                "dataset_fullname": form["geno-dataset-fullname"],
-                "dataset_shortname": form["geno-dataset-shortname"],
-                "public": "on"
-            }
+        return __save_dataset__().then(
+            lambda new_dataset: oauth2_post(
+                "auth/resource/genotypes/create",
+                json={
+                    **dict(request.form),
+                    "species_id": species["SpeciesId"],
+                    "population_id": population["Id"],
+                    "dataset_id": new_dataset["Id"],
+                    "dataset_name": new_dataset["Name"],
+                    "dataset_fullname": new_dataset["FullName"],
+                    "dataset_shortname": new_dataset["ShortName"],
+                    "public": "on"
+                }
+            )
         ).either(
             make_either_error_handler(
                 "There was an error creating the genotype dataset."),
diff --git a/uploader/templates/genotypes/create-dataset.html b/uploader/templates/genotypes/create-dataset.html
index 10331c1..5a6d3d2 100644
--- a/uploader/templates/genotypes/create-dataset.html
+++ b/uploader/templates/genotypes/create-dataset.html
@@ -35,7 +35,9 @@
              id="txt-geno-dataset-name"
              name="geno-dataset-name"
              required="required"
-             class="form-control" />
+             class="form-control"
+             value="{{population.Name}}Geno"
+             readonly="readonly" />
       <small class="form-text text-muted">
         <p>This is a short representative, but constrained name for the genotype
           dataset.<br />
@@ -50,7 +52,8 @@
              id="txt-geno-dataset-fullname"
              name="geno-dataset-fullname"
              required="required"
-             class="form-control" />
+             class="form-control"
+             value="{{population.Name}} Genotypes" />
       <small class="form-text text-muted">
         <p>This is a longer, more descriptive name for your dataset.</p></small>
     </div>
@@ -61,7 +64,8 @@
       <input type="text"
              id="txt-geno-dataset-shortname"
              name="geno-dataset-shortname"
-             class="form-control" />
+             class="form-control"
+             value="{{population.Name}}Geno" />
       <small class="form-text text-muted">
         <p>A short name for your dataset. If you leave this field blank, the
           short name will be set to the same value as the
diff --git a/uploader/templates/genotypes/list-genotypes.html b/uploader/templates/genotypes/list-genotypes.html
index a2b98c8..be297a4 100644
--- a/uploader/templates/genotypes/list-genotypes.html
+++ b/uploader/templates/genotypes/list-genotypes.html
@@ -9,19 +9,6 @@
 {{flash_all_messages()}}
 
 <div class="row">
-  <h2>Genetic Markers</h2>
-  <p>There are a total of {{total_markers}} currently registered genetic markers
-    for the "{{species.FullName}}" species. You can click
-    <a href="{{url_for('species.populations.genotypes.list_markers',
-             species_id=species.SpeciesId,
-             population_id=population.Id)}}"
-       title="View genetic markers for species '{{species.FullName}}">
-      this link to view the genetic markers
-    </a>.
-  </p>
-</div>
-
-<div class="row">
   <h2>Genotype Encoding</h2>
   <p>
     The genotype encoding used for the "{{population.FullName}}" population from
@@ -56,14 +43,47 @@
   </table>
 
   {%if genocode | length < 1%}
-  <a href="#add-genotype-encoding"
-     title="Add a genotype encoding system for this population"
-     class="btn btn-primary not-implemented">
-    add genotype encoding
+  <div class="col">
+    <a href="#add-genotype-encoding"
+       title="Add a genotype encoding system for this population"
+       class="btn btn-primary not-implemented">
+      define genotype encoding
     </a>
+  </div>
   {%endif%}
 </div>
 
+<div class="row">
+  <h2 class="subheading">Genetic Markers</h2>
+
+  <table id="tbl-genetic-markers" class="table compact stripe cell-border"
+         data-genetic-markers='{{genetic_markers | tojson}}'>
+    <thead>
+      <tr>
+        <th title="">Index</th>
+        <th title="">Marker Name</th>
+        <th title="Chromosome">Chr</th>
+        <th title="Physical location of the marker in megabasepairs">
+          Location (Mb)</th>
+        <th title="">Source</th>
+        <th title="">Source2</th>
+    </thead>
+
+    <tbody>
+      {%for marker in markers%}
+      <tr>
+        <td></td>
+        <td></td>
+        <td></td>
+        <td></td>
+        <td></td>
+        <td></td>
+      </tr>
+      {%endfor%}
+    </tbody>
+  </table>
+</div>
+
 <div class="row text-danger">
   <h3>Some Important Concepts to Consider/Remember</h3>
   <ul>
@@ -130,3 +150,22 @@
     all the rest.</p>
 </div>
 {%endblock%}
+
+
+{%block javascript%}
+<script type="text/javascript">
+  $(function() {
+      var dtGeneticMarkers = buildDataTable(
+          "#tbl-genetic-markers",
+          JSON.parse($("#tbl-genetic-markers").attr("data-genetic-markers")),
+          [
+              {data: 'index'},
+              {data: 'Name'},
+              {data: 'Chr'},
+              {data: 'Mb'},
+              {data: 'Source'},
+              {data: 'Source2'}
+          ]);
+  })
+</script>
+{%endblock%}
diff --git a/uploader/templates/genotypes/select-population.html b/uploader/templates/genotypes/select-population.html
deleted file mode 100644
index acdd063..0000000
--- a/uploader/templates/genotypes/select-population.html
+++ /dev/null
@@ -1,25 +0,0 @@
-{%extends "genotypes/base.html"%}
-{%from "flash_messages.html" import flash_all_messages%}
-{%from "species/macro-display-species-card.html" import display_species_card%}
-{%from "populations/macro-select-population.html" import select_population_form%}
-
-{%block title%}Genotypes{%endblock%}
-
-{%block pagetitle%}Genotypes{%endblock%}
-
-
-{%block contents%}
-{{flash_all_messages()}}
-
-<div class="row">
-  {{select_population_form(url_for("species.populations.genotypes.select_population", species_id=species.SpeciesId), species, populations)}}
-</div>
-{%endblock%}
-
-{%block sidebarcontents%}
-{{display_species_card(species)}}
-{%endblock%}
-
-{%block javascript%}
-<script type="text/javascript" src="/static/js/populations.js"></script>
-{%endblock%}