about summary refs log tree commit diff
path: root/wqflask/base
diff options
context:
space:
mode:
Diffstat (limited to 'wqflask/base')
-rw-r--r--wqflask/base/data_set/dataset.py2
-rw-r--r--wqflask/base/species.py71
2 files changed, 33 insertions, 40 deletions
diff --git a/wqflask/base/data_set/dataset.py b/wqflask/base/data_set/dataset.py
index f035e028..69c842ad 100644
--- a/wqflask/base/data_set/dataset.py
+++ b/wqflask/base/data_set/dataset.py
@@ -45,7 +45,7 @@ class DataSet:
             self.accession_id = self.get_accession_id()
         if get_samplelist == True:
             self.group.get_samplelist(redis_conn)
-        self.species = species.TheSpecies(self)
+        self.species = species.TheSpecies(dataset=self)
 
     def as_dict(self):
         return {
diff --git a/wqflask/base/species.py b/wqflask/base/species.py
index 0ee04630..68b00c70 100644
--- a/wqflask/base/species.py
+++ b/wqflask/base/species.py
@@ -1,23 +1,19 @@
-from collections import OrderedDict
 from dataclasses import dataclass
-from dataclasses import InitVar
-from typing import Optional, Dict, Any, Union
+from typing import Optional, Union
+from collections import OrderedDict
+
 from wqflask.database import database_connection
 
 
-@dataclass
 class TheSpecies:
     """Data related to species."""
-    dataset: Optional[Dict] = None
-    species_name: Optional[str] = None
 
-    def __post_init__(self) -> None:
-        # Just an alias of species_name.  It's safe for this to be None.
-        self.name = self.species_name
-        with database_connection() as conn:
-            self.chromosomes = Chromosomes(conn=conn,
-                                           species=self.species_name,
-                                           dataset=self.dataset)
+    def __init__(self, dataset=None, species_name=None) -> None:
+        "Initialise the Species object"
+        self.dataset = dataset
+        self.name = self.species_name = species_name
+        self.chromosomes = Chromosomes(species=species_name,
+                                       dataset=dataset)
 
 
 @dataclass
@@ -35,34 +31,31 @@ class IndChromosome:
 @dataclass
 class Chromosomes:
     """Data related to a chromosome"""
-    conn: Any
-    dataset: InitVar[Dict] = None
-    species: Optional[str] = None
 
-    def __post_init__(self, dataset) -> None:
-        if self.species is None:
+    def __init__(self, dataset, species: Optional[str]) -> None:
+        "initialise the Chromosome object"
+        self.species = species
+        if species is None:
             self.dataset = dataset
 
-    @property
-    def chromosomes(self) -> OrderedDict:
+    def chromosomes(self, db_cursor) -> OrderedDict:
         """Lazily fetch the chromosomes"""
         chromosomes = OrderedDict()
-        with database_connection() as conn, conn.cursor() as cursor:
-            if self.species is not None:
-                cursor.execute(
-                    "SELECT Chr_Length.Name, Chr_Length.OrderId, Length "
-                    "FROM Chr_Length, Species WHERE "
-                    "Chr_Length.SpeciesId = Species.SpeciesId AND "
-                    "Species.Name = %s "
-                    "ORDER BY OrderId", (self.species.capitalize(),))
-            else:
-                cursor.execute(
-                    "SELECT Chr_Length.Name, Chr_Length.OrderId, "
-                    "Length FROM Chr_Length, InbredSet WHERE "
-                    "Chr_Length.SpeciesId = InbredSet.SpeciesId AND "
-                    "InbredSet.Name = "
-                    "%s ORDER BY OrderId", (self.dataset.group.name,))
-            for name, _, length in cursor.fetchall():
-                chromosomes[name] = IndChromosome(
-                    name=name, length=length)
-            return chromosomes
+        if self.species is not None:
+            db_cursor.execute(
+                "SELECT Chr_Length.Name, Chr_Length.OrderId, Length "
+                "FROM Chr_Length, Species WHERE "
+                "Chr_Length.SpeciesId = Species.SpeciesId AND "
+                "Species.Name = %s "
+                "ORDER BY OrderId", (self.species.capitalize(),))
+        else:
+            db_cursor.execute(
+                "SELECT Chr_Length.Name, Chr_Length.OrderId, "
+                "Length FROM Chr_Length, InbredSet WHERE "
+                "Chr_Length.SpeciesId = InbredSet.SpeciesId AND "
+                "InbredSet.Name = "
+                "%s ORDER BY OrderId", (self.dataset.group.name,))
+        for name, _, length in db_cursor.fetchall():
+            chromosomes[name] = IndChromosome(
+                name=name, length=length)
+        return chromosomes