aboutsummaryrefslogtreecommitdiff
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