def post(self): """ Given a list of subjects id, returns related entities """ es = current_app.extensions['esquery'] parser = boilerplate.get_parser() parser.add_argument('subject', type=str, action='append', required=False, help="subjects to get relations for") parser.add_argument('object', type=str, action='append', required=False, help="objeects to get relations for") parser.add_argument('sort', type=str, required=False, action='append', help="sort the results by this score type", default=['scores.overlap']) args = parser.parse_args() subjects = args.pop('subject', []) or [] objects = args.pop('object', []) or [] res = es.get_relations(subjects, objects, **args) if not res: abort(404, message='Cannot find relations for id %s' % str(subjects)) return CTTVResponse.OK(res)
def get(self): """ Given a list of target ids returns target generic information """ es = current_app.extensions['esquery'] parser = boilerplate.get_parser() parser.add_argument('id', type=str, required=False, action='append', help="target ids to get the information") parser.add_argument('fields', type=str, required=False, action='append', help="fields to include in the output") kwargs = parser.parse_args() target_ids = kwargs.pop('id', []) or [] res = es.get_gene_info(target_ids, **kwargs) if res: return CTTVResponse.OK(res) abort(404, message="Gene id %s cannot be found" % target_ids)
class FreeTextSearch(Resource, Paginable): parser = boilerplate.get_parser() parser.add_argument('q', type=str, required=True, help="Query cannot be blank") parser.add_argument('filter', type=str, required=False, action='append', help="filter by target or disease") parser.add_argument('highlight', type=boolean, required=False, help="return where the query was matched, defaults to true") parser.add_argument('fields', type=str, action='append', required=False, help="specify the fields to return for each object") parser.add_argument('search_profile', type=str, required=False, help="specify the entity type to look for. Only {drug|all} at the momment") def get(self): """ Search for gene and disease Search with a parameter q = 'your query' """ start_time = time.time() kwargs = self.parser.parse_args() searchphrase = kwargs.pop('q') filter = kwargs.pop('filter') if len(searchphrase) > 1: res = current_app.extensions['esquery'].free_text_search(searchphrase, doc_filter=filter, **kwargs) return CTTVResponse.OK(res, took=time.time() - start_time) else: abort(400, message="Query is too short")
def post(self): """ Given a list of subjects id, returns related entities """ es = current_app.extensions['esquery'] parser = boilerplate.get_parser() parser.add_argument('dataset', type=str, required=True, help="name of the dataset") parser.add_argument('query', type=str, required=True, help="query to retrieve data in ES format") args = parser.parse_args() dataset_name = args.get('dataset', '') print("post ", dataset_name) es_query = args.get('query', '') if not es_query: abort(404, message='No query specified in the request') res = es.get_documents_from_dataset(dataset_name, es_query) if not res: abort(404, message='Cannot find relations for id %s' % str(subjects)) return CTTVResponse.OK(res)
def get(self): """ Given a dataset name and an ES query, returns all documents from this dataset """ es = current_app.extensions['esquery'] parser = boilerplate.get_parser() parser.add_argument('dataset', type=str, required=True, help="name of the dataset") parser.add_argument('query', type=str, required=True, help="query to retrieve data in ES format") args = parser.parse_args() dataset_name = args.get('dataset', '') print("get ", dataset_name) es_query = args.get('query', '') if not es_query: abort(404, message='No query specified in the request') res = es.get_documents_from_dataset(dataset_name, es_query) if not res: abort(404, message='Cannot find documents for dataset %s' % str(dataset_name)) return CTTVResponse.OK(res)
class BestHitSearch(restful.Resource, Paginable): '''This is similar to freeTextSearch but different because it allows for a list of search queries instead of one query''' parser = boilerplate.get_parser() parser.add_argument('q', type=str, action='append', required=True, help="Query cannot be blank") parser.add_argument('filter', type=str, required=False, action='append', help="filter by target or disease") parser.add_argument( 'highlight', type=boolean, required=False, help="return where the query was matched, defaults to true") @is_authenticated @rate_limit def get(self): """ Search for gene and disease Search with a parameter q = 'your query' 'fields':['id', 'approved_symbol'] """ start_time = time.time() kwargs = self.parser.parse_args() filter_ = kwargs.pop('filter') or ['all'] searchphrases = kwargs.pop('q') if len(searchphrases) > 500: raise AttributeError('request size too big') res = current_app.extensions['esquery'].best_hit_search( searchphrases, doc_filter=filter_, **kwargs) return CTTVResponse.OK(res, took=time.time() - start_time) @is_authenticated @rate_limit def post(self): """ Search for gene and disease Search with a parameter q = 'your query' """ start_time = time.time() kwargs = request.get_json(force=True) filter_ = [kwargs.pop('filter')] or ['all'] searchphrases = kwargs.pop('q') if len(searchphrases) > 500: raise AttributeError('request size too big') res = current_app.extensions['esquery'].best_hit_search( searchphrases, doc_filter=filter_, **kwargs) return CTTVResponse.OK(res, took=time.time() - start_time)
def get(self, target_id): """ Given a target id, returns related targets """ es = current_app.extensions['esquery'] parser = boilerplate.get_parser() parser.add_argument('sort', type=str, required=False, action='append', help="sort the results by this score type", default=['scores.overlap']) args = parser.parse_args() res = es.get_relations([target_id],[], **args) if not res: abort(404, message='Cannot find relations for id %s'%str(target_id)) return CTTVResponse.OK(res)
def get(self): """ Get association objects Get association objects for a gene, an efo or a combination of them Test with ENSG00000136997 """ parser = boilerplate.get_parser() parser.add_argument('target', type=str, action='append', required=False,) # parser.add_argument('gene-bool', type=str, action='store', required=False, help="Boolean operator to combine genes") parser.add_argument('disease', type=str, action='append', required=False, ) # parser.add_argument('efo-bool', type=str, action='store', required=False, help="Boolean operator to combine genes") parser.add_argument('therapeutic_area', type=str, action='append', required=False, ) parser.add_argument('scorevalue_min', type=float, required=False, ) parser.add_argument('scorevalue_max', type=float, required=False, ) parser.add_argument('scorevalue_types', type=str, required=False, action='append',) parser.add_argument('datasource', type=str, action='append', required=False,) parser.add_argument('datatype', type=str, action='append', required=False, ) parser.add_argument('pathway', type=str, action='append', required=False, ) parser.add_argument(FilterTypes.TARGET_CLASS, type=int, action='append', ) parser.add_argument('uniprotkw', type=str, action='append', required=False,) parser.add_argument('rna_expression_level', type=int, default=0, choices=list(xrange(0, 11)), required=False) parser.add_argument('rna_expression_tissue', type=str, action='append', required=False, default=[]) parser.add_argument('protein_expression_level', type=int, default=0, choices=list(xrange(0, 4)), required=False) parser.add_argument('protein_expression_tissue', type=str, action='append', required=False, default=[]) parser.add_argument('go', type=str, action='append', required=False, help="consider only genes linked to this GO term") # parser.add_argument('filter', type=str, required=False, help="pass a string uncluding the list of filters you want to apply in the right order. Only use if you cannot preserve the order of the arguments in the get request") # parser.add_argument('outputstructure', type=str, required=False, help="Return the output in a list with 'flat' or in a hierarchy with 'tree' (only works when searching for gene)", choices=['flat','tree']) parser.add_argument('targets_enrichment', type=str, required=False, help="disease enrichment analysis for a set of targets") parser.add_argument('direct', type=boolean, required=False,) parser.add_argument('facets', type=str, required=False, default="") parser.add_argument('facets_size', type=int, required=False, default=0) parser.add_argument('sort', type=str, required=False, action='append',) parser.add_argument('search', type=str, required=False, ) parser.add_argument('cap_scores', type=boolean, required=False, ) args = parser.parse_args() self.remove_empty_params(args) data = self.get_association(params=args) return CTTVResponse.OK(data)
def get(self): """ Get a list of evidences filtered by gene, efo and/or eco codes test with: ENSG00000136997, """ parser = boilerplate.get_parser() parser.add_argument('target', type=str, action='append', required=False, help="ensembl id in target.id") # parser.add_argument('gene-bool', type=str, action='store', required=False, help="Boolean operator to combine genes") parser.add_argument('disease', type=str, action='append', required=False, help="List of efo code in disease") # parser.add_argument('efo-bool', type=str, action='store', required=False, help="Boolean operator to combine genes") parser.add_argument('eco', type=str, action='append', required=False, help="List of evidence types as eco code") # parser.add_argument('eco-bool', type=str, action='store', required=False, help="Boolean operator to combine evidence types") # parser.add_argument('body', type=str, action='store', required=False, location='form', help="json object with query parameter") parser.add_argument('datasource', type=str, action='append', required=False, help="List of datasource to consider") parser.add_argument('datatype', type=str, action='append', required=False, help="List of datatype to consider") # parser.add_argument('auth_token', type=str, required=True, help="auth_token is required") # parser.add_argument('direct', type=boolean, required=False, help="return only evidence directly associated with the efo term if false or to all its children if true", default=False) parser.add_argument('pathway', type=str, action='append', required=False, help="pathway involving a set of genes") parser.add_argument('uniprotkw', type=str, action='append', required=False, help="uniprot keyword linked to a set of genes") parser.add_argument('scorevalue_min', type=float, required=False, help="filter by minimum score value") parser.add_argument('scorevalue_max', type=float, required=False, help="filter by maximum score value") parser.add_argument( 'sort', type=str, action='append', required=False, help= "order the results by the given list of fields. default is score.association_score" ) parser.add_argument('begin', type=long, required=False, help="filter by range with this start") parser.add_argument('end', type=long, required=False, help="filter by range with this end") parser.add_argument( 'chromosome', type=str, required=False, help="filter by range required chromosome location") args = parser.parse_args() targets = args.pop('target', []) or [] # gene_operator = args.pop('gene-bool','OR') or 'OR' diseases = args.pop('disease', []) or [] # object_operator = args.pop('efo-bool','OR') or 'OR' evidence_types = args.pop('eco', []) or [] # evidence_type_operator = args.pop('eco-bool','OR') or 'OR' datasources = args.pop('datasource', []) or [] datatypes = args.pop('datatype', []) or [] if args.get('sort') is None: args['sort'] = [EvidenceSortOptions.SCORE] # if not (genes # or objects # or evidence_types # or datasources # or datatypes # or args['pathway'] # or args['uniprotkw'] # or args['datatype']): # abort(404, message='Please provide at least one gene, efo, eco or datasource') data = self.get_evidence(targets, diseases, evidence_types, datasources, datatypes, params=args) return CTTVResponse.OK(data, )