aboutsummaryrefslogtreecommitdiff
path: root/gn3/db
diff options
context:
space:
mode:
Diffstat (limited to 'gn3/db')
-rw-r--r--gn3/db/traits.py67
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()))