diff options
Diffstat (limited to 'wqflask/wqflask/do_search.py')
-rw-r--r-- | wqflask/wqflask/do_search.py | 109 |
1 files changed, 96 insertions, 13 deletions
diff --git a/wqflask/wqflask/do_search.py b/wqflask/wqflask/do_search.py index a2eddfc6..7b3e0869 100644 --- a/wqflask/wqflask/do_search.py +++ b/wqflask/wqflask/do_search.py @@ -20,22 +20,23 @@ class DoSearch(object): # Used to translate search phrases into classes search_types = dict() - def __init__(self, search_term, search_operator, dataset): + def __init__(self, search_term, search_operator=None, dataset=None): self.search_term = search_term # Make sure search_operator is something we expect assert search_operator in (None, "=", "<", ">", "<=", ">="), "Bad search operator" self.search_operator = search_operator self.dataset = dataset - print("self.dataset is boo: ", type(self.dataset), pf(self.dataset)) - print("self.dataset.group is: ", pf(self.dataset.group)) - - #Get group information for dataset and the species id - self.species_id = webqtlDatabaseFunction.retrieve_species_id(self.dataset.group.name) + + if self.dataset: + print("self.dataset is boo: ", type(self.dataset), pf(self.dataset)) + print("self.dataset.group is: ", pf(self.dataset.group)) + #Get group information for dataset and the species id + self.species_id = webqtlDatabaseFunction.retrieve_species_id(self.dataset.group.name) def execute(self, query): """Executes query and returns results""" query = self.normalize_spaces(query) - print("in do_search query is:", pf(query)) + #print("in do_search query is:", pf(query)) results = g.db.execute(query, no_parameters=True).fetchall() #results = self.cursor.fetchall() return results @@ -57,8 +58,42 @@ class DoSearch(object): @classmethod def get_search(cls, search_type): + print("search_types are:", pf(cls.search_types)) return cls.search_types[search_type] +class QuickMrnaAssaySearch(DoSearch): + """A general search for mRNA assays""" + + DoSearch.search_types['quick_mrna_assay'] = "QuickMrnaAssaySearch" + + base_query = """SELECT ProbeSet.Name as ProbeSet_Name, + ProbeSet.Symbol as ProbeSet_Symbol, + ProbeSet.description as ProbeSet_Description, + ProbeSet.Chr_num as ProbeSet_Chr_Num, + ProbeSet.Mb as ProbeSet_Mb, + ProbeSet.name_num as ProbeSet_name_num + FROM ProbeSet """ + + header_fields = ['', + 'Record ID', + 'Symbol', + 'Location'] + + def run(self): + """Generates and runs a search for assays across all mRNA expression datasets""" + + print("Running ProbeSetSearch") + query = self.base_query + """WHERE (MATCH (ProbeSet.Name, + ProbeSet.description, + ProbeSet.symbol, + ProbeSet.alias) + AGAINST ('%s' IN BOOLEAN MODE)) + """ % (escape(self.search_term[0])) + + #print("final query is:", pf(query)) + + return self.execute(query) + class MrnaAssaySearch(DoSearch): """A search within an mRNA expression dataset""" @@ -99,7 +134,7 @@ class MrnaAssaySearch(DoSearch): where_clause, escape(self.dataset.id))) - print("query is:", pf(query)) + #print("query is:", pf(query)) return query @@ -120,11 +155,11 @@ class MrnaAssaySearch(DoSearch): """ % (escape(self.search_term[0]), escape(str(self.dataset.id))) - print("final query is:", pf(query)) + #print("final query is:", pf(query)) return self.execute(query) - + class PhenotypeSearch(DoSearch): """A search within a phenotype dataset""" @@ -198,9 +233,57 @@ class PhenotypeSearch(DoSearch): query = self.compile_final_query(where_clause = self.get_fields_clause()) - results = self.execute(query) - print("in [df] run results are:", results) - return results + return self.execute(query) + +class QuickPhenotypeSearch(PhenotypeSearch): + """A search across all phenotype datasets""" + + DoSearch.search_types['quick_phenotype'] = "QuickPhenotypeSearch" + + base_query = """SELECT Species.Name as Species_Name, + PublishFreeze.FullName as Dataset_Name, + PublishFreeze.Name, + PublishXRef.Id, + PublishFreeze.createtime as thistable, + Publication.PubMed_ID as Publication_PubMed_ID, + Phenotype.Post_publication_description as Phenotype_Name + FROM Phenotype, + PublishFreeze, + Publication, + PublishXRef, + InbredSet, + Species """ + + search_fields = ('Phenotype.Post_publication_description', + 'Phenotype.Pre_publication_description', + 'Phenotype.Pre_publication_abbreviation', + 'Phenotype.Post_publication_abbreviation', + 'Phenotype.Lab_code', + 'Publication.PubMed_ID', + 'Publication.Abstract', + 'Publication.Title', + 'Publication.Authors') + + def compile_final_query(self, where_clause = ''): + """Generates the final query string""" + + query = (self.base_query + + """WHERE %s + PublishXRef.PhenotypeId = Phenotype.Id and + PublishXRef.PublicationId = Publication.Id and + PublishXRef.InbredSetId = InbredSet.Id and + InbredSet.SpeciesId = Species.Id""" % where_clause) + + print("query is:", pf(query)) + + return query + + def run(self): + """Generates and runs a search across all phenotype datasets""" + + query = self.compile_final_query(where_clause = self.get_fields_clause()) + + return self.execute(query) class GenotypeSearch(DoSearch): """A search within a genotype dataset""" |