about summary refs log tree commit diff
path: root/uploader
diff options
context:
space:
mode:
authorFrederick Muriuki Muriithi2024-09-19 13:30:20 -0500
committerFrederick Muriuki Muriithi2024-09-19 13:30:20 -0500
commitf909cd13cadab9bd0bb6e816b6c6f492ab18f28a (patch)
tree612e676d95ac2ee4a0a4c765338ed73c30b674ad /uploader
parentfc99a1700007e8a1b71e07455c57f8692aad2a59 (diff)
downloadgn-uploader-f909cd13cadab9bd0bb6e816b6c6f492ab18f28a.tar.gz
List genotype datasets
Diffstat (limited to 'uploader')
-rw-r--r--uploader/genotypes/models.py16
-rw-r--r--uploader/genotypes/views.py13
-rw-r--r--uploader/templates/genotypes/list-genotypes.html20
3 files changed, 49 insertions, 0 deletions
diff --git a/uploader/genotypes/models.py b/uploader/genotypes/models.py
index 53c5fb8..642caa6 100644
--- a/uploader/genotypes/models.py
+++ b/uploader/genotypes/models.py
@@ -39,3 +39,19 @@ def genotype_markers(
         cursor.execute(_query, (species_id,))
         debug_query(cursor)
         return tuple(dict(row) for row in cursor.fetchall())
+
+
+def genotype_datasets(
+        conn: mdb.Connection,
+        species_id: int,
+        population_id: int
+) -> tuple[dict, ...]:
+    """Retrieve genotype datasets from the database."""
+    with conn.cursor(cursorclass=DictCursor) as cursor:
+        cursor.execute(
+            "SELECT gf.* FROM Species AS s INNER JOIN InbredSet AS iset "
+            "ON s.Id=iset.SpeciesId INNER JOIN GenoFreeze AS gf "
+            "ON iset.Id=gf.InbredSetId "
+            "WHERE s.Id=%s AND iset.Id=%s",
+            (species_id, population_id))
+        return tuple(dict(row) for row in cursor.fetchall())
diff --git a/uploader/genotypes/views.py b/uploader/genotypes/views.py
index 2ff9965..294da0e 100644
--- a/uploader/genotypes/views.py
+++ b/uploader/genotypes/views.py
@@ -15,6 +15,7 @@ from uploader.population.models import (populations_by_species,
                                         population_by_species_and_id)
 
 from .models import (genotype_markers,
+                     genotype_datasets,
                      genotype_markers_count,
                      genocode_by_population)
 
@@ -97,6 +98,8 @@ def list_genotypes(species_id: int, population_id: int):
                                    conn, population_id),
                                total_markers=genotype_markers_count(
                                    conn, species_id),
+                               datasets=genotype_datasets(
+                                   conn, species_id, population_id),
                                activelink="list-genotypes")
 
 
@@ -125,3 +128,13 @@ def list_markers(species_id: int):
                                count=count,
                                markers=markers,
                                activelink="list-markers")
+
+@genotypesbp.route(
+    "/<int:species_id>/populations/<int:population_id>/genotypes/datasets/"
+    "<int:dataset_id>/view",
+    methods=["GET"])
+@require_login
+def view_dataset(species_id: int, population_id: int, dataset_id: int):
+    """View details regarding a specific dataset."""
+    return (f"Genotype dataset '{dataset_id}, from population '{population_id}' "
+            f"of species '{species_id}'.")
diff --git a/uploader/templates/genotypes/list-genotypes.html b/uploader/templates/genotypes/list-genotypes.html
index 31b9eeb..8afd591 100644
--- a/uploader/templates/genotypes/list-genotypes.html
+++ b/uploader/templates/genotypes/list-genotypes.html
@@ -104,6 +104,26 @@
 
   {%if datasets | length > 0%}
     <table class="table">
+      <thead>
+        <tr>
+          <th>Name</th>
+          <th>Full Name</th>
+        </tr>
+      </thead>
+
+      <tbody>
+        {%for dataset in datasets%}
+        <tr>
+          <td>{{dataset.Name}}</td>
+          <td><a href="{{url_for('species.populations.genotypes.view_dataset',
+                       species_id=species.SpeciesId,
+                       population_id=population.Id,
+                       dataset_id=dataset.Id)}}"
+                 title="View details regarding and manage dataset '{{dataset.FullName}}'">
+              {{dataset.FullName}}</a></td>
+        </tr>
+        {%endfor%}
+      </tbody>
     </table>
   {%else%}
     <p class="text-warning">