aboutsummaryrefslogtreecommitdiff
path: root/wqflask/base/species.py
diff options
context:
space:
mode:
authorFrederick Muriuki Muriithi2022-09-22 06:33:47 +0300
committerFrederick Muriuki Muriithi2022-09-22 06:33:47 +0300
commit30f305c1b87b4b6c4f308b15d5ae9248dc367e14 (patch)
treec5eb6fa62ccb63740a006bf3029cbd9cce140dcb /wqflask/base/species.py
parentd4f00edc48e4b0b467440cb7566f26920be99d95 (diff)
downloadgenenetwork2-30f305c1b87b4b6c4f308b15d5ae9248dc367e14.tar.gz
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.
Diffstat (limited to 'wqflask/base/species.py')
-rw-r--r--wqflask/base/species.py71
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