diff options
Diffstat (limited to 'wqflask/base/species.py')
-rw-r--r-- | wqflask/base/species.py | 71 |
1 files changed, 32 insertions, 39 deletions
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 |