diff options
Diffstat (limited to 'gn3/db/traits.py')
-rw-r--r-- | gn3/db/traits.py | 67 |
1 files changed, 11 insertions, 56 deletions
diff --git a/gn3/db/traits.py b/gn3/db/traits.py index 0cebe2c..4860a07 100644 --- a/gn3/db/traits.py +++ b/gn3/db/traits.py @@ -1,23 +1,21 @@ """This contains all the necessary functions that are required to add traits to the published database""" from dataclasses import dataclass -from itertools import chain -from typing import Optional -from typing import Any, Dict, List, Optional +from typing import Any, Dict, Optional @dataclass(frozen=True) -class riset: +class Riset: """Class for keeping track of riset. A riset is a group e.g. rat HSNIH-Palmer, BXD """ - name: str - r_id: int + name: Optional[str] + r_id: Optional[int] @dataclass(frozen=True) -class webqtlCaseData: +class WebqtlCaseData: """Class for keeping track of one case data in one trait""" value: Optional[float] = None variance: Optional[float] = None @@ -48,6 +46,10 @@ HLCPublish.""" def get_riset(data_type: str, name: str, conn: Any): + """Get the groups given the data type and it's PublishFreeze or GenoFreeze +name + + """ query, _name, _id = None, None, None if data_type == "Publish": query = ("SELECT InbredSet.Name, InbredSet.Id FROM InbredSet, " @@ -68,7 +70,7 @@ def get_riset(data_type: str, name: str, conn: Any): _name, _id = cursor.fetchone() if _name == "BXD300": _name = "BXD" - return riset(_name, _id) + return Riset(_name, _id) def insert_publication(pubmed_id: int, publication: Optional[Dict], @@ -80,7 +82,7 @@ def insert_publication(pubmed_id: int, publication: Optional[Dict], with conn.cursor() as cursor: cursor.execute(sql) _id = cursor.fetchone() - if not _id: + if not _id and publication: # The Publication contains the fields: 'authors', 'title', 'abstract', # 'journal','volume','pages','month','year' insert_query = ("INSERT into Publication (%s) Values (%s)" % @@ -88,50 +90,3 @@ def insert_publication(pubmed_id: int, publication: Optional[Dict], ", ".join(['%s'] * len(publication)))) with conn.cursor() as cursor: cursor.execute(insert_query, tuple(publication.values())) - - -def insert_publication_data(riset_id: int, strains: List, conn: Any): - species_id = None - with conn.cursor() as cursor: - cursor.execute("SELECT SpeciesId from InbredSet where " - "Id=%s" % riset_id) - species_id, *_ = cursor.fetchone() - cursor.execute( - "SELECT Id FROM Strain WHERE SpeciesId=" - "%s AND Name in (%s)" - % (riset_id, ", ".join(f"'{strain}'" for strain in strains))) - strain_ids = cursor.fetchall() - data_id, *_ = cursor.execute("SELECT max(Id) " - "from PublishData").fetchone() - - if strain_ids: - strain_ids = list(chain(*strain_ids)) - for strain, strain_id in zip(strains, strain_ids): - # TODO: Fetch this values correctly using sql - value, variance, trait_np = 1, 1, 1 - if value: - cursor.execute( - "INSERT INTO PublishData values (%d, %d, %s)" % - (data_id, strain_id, value)) - if variance: - cursor.execute( - "INSERT INTO PublishSE values (%d, %d, %s)" % - (data_id, strain_id, variance)) - if trait_np: - cursor.execute( - "INSERT INTO NStrain values (%d, %d, %s)" % - (data_id, strain_id, trait_np)) - inbred_set_id = lookup_webqtldataset_name(riset_name="", - conn=conn) - cursor.execute( - "SELECT max(Sequence) FROM PublishXRef where " - "InbredSetId = %d and PhenotypeId = %d and PublicationId = %d" % - (inbred_set_id, phenotype_id, publication_id)) - - -def insert_phenotype(phenotype: Optional[Dict], conn: Any): - insert_query = ("INSERT into Phenotype (%s) Values (%s)" % - (", ".join(phenotype.keys()), - ", ".join(['%s'] * len(phenotype)))) - with conn.cursor() as cursor: - cursor.execute(insert_query, tuple(phenotype.values())) |