From 30f305c1b87b4b6c4f308b15d5ae9248dc367e14 Mon Sep 17 00:00:00 2001 From: Frederick Muriuki Muriithi Date: Thu, 22 Sep 2022 06:33:47 +0300 Subject: Provide database cursor as argument for TheSpecies and Chromosomes Provide the database cursor as an argument to the methods of the two classes: * wqflask.base.species.TheSpecies * wqflask.base.species.Chromosomes Also update dependent code to initialise and pass the cursor where these classes are used. --- wqflask/base/data_set/dataset.py | 2 +- wqflask/base/species.py | 71 ++++++++++++++++++---------------------- 2 files changed, 33 insertions(+), 40 deletions(-) (limited to 'wqflask/base') 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 -- cgit v1.2.3