import json from gn2.base.data_set import create_dataset from gn2.base.trait import GeneralTrait from gn2.db import webqtlDatabaseFunction from gn2.wqflask.database import database_connection from gn2.utility.tools import get_setting class GSearch: def __init__(self, kw): self.type = kw['type'] self.terms = kw['terms'] #self.row_range = kw['row_range'] if self.type == "gene": results = None with database_connection(get_setting("SQL_URI")) as conn, conn.cursor() as cursor: cursor.execute(""" SELECT Species.`Name` AS species_name, InbredSet.`Name` AS inbredset_name, Tissue.`Name` AS tissue_name, ProbeSetFreeze.Name AS probesetfreeze_name, ProbeSet.Name AS probeset_name, ProbeSet.Symbol AS probeset_symbol, ProbeSet.`description` AS probeset_description, ProbeSet.Chr AS chr, ProbeSet.Mb AS mb, ProbeSetXRef.Mean AS mean, ProbeSetXRef.LRS AS lrs, ProbeSetXRef.`Locus` AS locus, ProbeSetXRef.`pValue` AS pvalue, ProbeSetXRef.`additive` AS additive FROM Species, InbredSet, ProbeSetXRef, ProbeSet, ProbeFreeze, ProbeSetFreeze, Tissue WHERE InbredSet.`SpeciesId`=Species.`Id` AND ProbeFreeze.InbredSetId=InbredSet.`Id` AND ProbeFreeze.`TissueId`=Tissue.`Id` AND ProbeSetFreeze.ProbeFreezeId=ProbeFreeze.Id AND ( MATCH (ProbeSet.Name,ProbeSet.description,ProbeSet.symbol,alias,GenbankId, UniGeneId, Probe_Target_Description) AGAINST (%s IN BOOLEAN MODE) ) AND ProbeSet.Id = ProbeSetXRef.ProbeSetId AND ProbeSetXRef.ProbeSetFreezeId=ProbeSetFreeze.Id AND ProbeSetFreeze.public > 0 ORDER BY species_name, inbredset_name, tissue_name, probesetfreeze_name, probeset_name LIMIT 6000""", (self.terms,)) results = cursor.fetchall() self.trait_list = [] for line in results: dataset = create_dataset( line[3], "ProbeSet", get_samplelist=False) trait_id = line[4] this_trait = GeneralTrait( dataset=dataset, name=trait_id, get_qtl_info=True, get_sample_info=False) self.trait_list.append(this_trait) elif self.type == "phenotype": with database_connection(get_setting("SQL_URI")) as conn, conn.cursor() as cursor: results = None cursor.execute(""" SELECT Species.`Name`, InbredSet.`Name`, PublishFreeze.`Name`, PublishXRef.`Id`, Phenotype.`Post_publication_description`, Publication.`Authors`, Publication.`Year`, PublishXRef.`LRS`, PublishXRef.`Locus`, PublishXRef.`additive` FROM Species, InbredSet, PublishFreeze, PublishXRef, Phenotype, Publication WHERE PublishXRef.`InbredSetId`=InbredSet.`Id` AND PublishFreeze.`InbredSetId`=InbredSet.`Id` AND InbredSet.`SpeciesId`=Species.`Id` AND PublishXRef.`PhenotypeId`=Phenotype.`Id` AND PublishXRef.`PublicationId`=Publication.`Id` AND (Phenotype.Post_publication_description REGEXP "[[:<:]]%s[[:>:]]" OR Phenotype.Pre_publication_description REGEXP "[[:<:]]%s[[:>:]]" OR Phenotype.Pre_publication_abbreviation REGEXP "[[:<:]]%s[[:>:]]" OR Phenotype.Post_publication_abbreviation REGEXP "[[:<:]]%s[[:>:]]" OR Phenotype.Lab_code REGEXP "[[:<:]]%s[[:>:]]" OR Publication.PubMed_ID REGEXP "[[:<:]]%s[[:>:]]" OR Publication.Abstract REGEXP "[[:<:]]%s[[:>:]]" OR Publication.Title REGEXP "[[:<:]]%s[[:>:]]" OR Publication.Authors REGEXP "[[:<:]]%s[[:>:]]" OR PublishXRef.Id REGEXP "[[:<:]]%s[[:>:]]") ORDER BY Species.`Name`, InbredSet.`Name`, PublishXRef.`Id` LIMIT 6000""", ((self.terms, ) * 10)) results = cursor.fetchall() self.trait_list = [] for line in results: dataset = create_dataset(line[2], "Publish") trait_id = line[3] this_trait = GeneralTrait( dataset=dataset, name=trait_id, get_qtl_info=True, get_sample_info=False) self.trait_list.append(this_trait) self.results = self.convert_to_json() def convert_to_json(self): json_dict = {} #json_dict['draw'] = self.draw, json_dict['recordsTotal'] = len(self.trait_list), json_dict['data'] = [] for i, trait in enumerate(self.trait_list): trait_row = {"checkbox": "".format(trait.name, trait.dataset.name), "index": i + 1, "species": trait.dataset.group.species, "group": trait.dataset.group.name, "tissue": trait.dataset.tissue, "dataset": trait.dataset.fullname, "record": "" + trait.name + "", "symbol": trait.symbol, "description": trait.description_display, "location": trait.location_repr, "mean": trait.mean, "max_lrs": trait.LRS_score_repr, "max_lrs_location": trait.LRS_location_repr, "additive_effect": trait.additive} json_dict['data'].append(trait_row) json_results = json.dumps(json_dict) return json_results