diff options
author | Alexander Kabui | 2021-05-10 08:46:44 +0300 |
---|---|---|
committer | GitHub | 2021-05-10 08:46:44 +0300 |
commit | f7eeb913af479358583844164400dc8489a87d8f (patch) | |
tree | 5deb035007120eff4d691c270c2ec2937622b852 /wqflask/base/species.py | |
parent | 0b723720f7b1b9802b2f5453b747c7e48b693817 (diff) | |
parent | 1afece5464520700901cbde19599ac45222ea58f (diff) | |
download | genenetwork2-f7eeb913af479358583844164400dc8489a87d8f.tar.gz |
Merge branch 'testing' into feature/integrate-correlation-api
Diffstat (limited to 'wqflask/base/species.py')
-rw-r--r-- | wqflask/base/species.py | 89 |
1 files changed, 50 insertions, 39 deletions
diff --git a/wqflask/base/species.py b/wqflask/base/species.py index 2771d116..f303aabb 100644 --- a/wqflask/base/species.py +++ b/wqflask/base/species.py @@ -1,55 +1,66 @@ -import collections +from collections import OrderedDict +from dataclasses import dataclass +from dataclasses import InitVar +from typing import Optional, Dict +from flask import g -from flask import Flask, g +@dataclass +class TheSpecies: + """Data related to species.""" + dataset: Optional[Dict] = None + species_name: Optional[str] = None -from utility.logger import getLogger -logger = getLogger(__name__ ) - -class TheSpecies(object): - def __init__(self, dataset=None, species_name=None): - if species_name != None: - self.name = species_name + def __post_init__(self): + if self.species_name is not None: + self.name = self.species_name self.chromosomes = Chromosomes(species=self.name) else: - self.dataset = dataset self.chromosomes = Chromosomes(dataset=self.dataset) -class IndChromosome(object): - def __init__(self, name, length): - self.name = name - self.length = length + +@dataclass +class IndChromosome: + """Data related to IndChromosome""" + name: str + length: int @property def mb_length(self): - """Chromosome length in megabases""" + """Chromosome length in mega-bases""" return self.length / 1000000 -class Chromosomes(object): - def __init__(self, dataset=None, species=None): - self.chromosomes = collections.OrderedDict() - if species != None: - query = """ - 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 - """ % species.capitalize() - else: + +@dataclass +class Chromosomes: + """Data related to a chromosome""" + dataset: InitVar[Dict] = None + species: Optional[str] = None + + def __post_init__(self, dataset): + if self.species is None: self.dataset = dataset - query = """ - 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 - logger.sql(query) + @property + def chromosomes(self): + """Lazily fetch the chromosomes""" + chromosomes = OrderedDict() + if self.species is not None: + query = ( + "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: + query = ( + "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) results = g.db.execute(query).fetchall() - for item in results: - self.chromosomes[item.OrderId] = IndChromosome(item.Name, item.Length) + chromosomes[item.OrderId] = IndChromosome( + item.Name, item.Length) + return chromosomes |