Beispiel #1
0
    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)
Beispiel #2
0
    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)
Beispiel #3
0
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")
Beispiel #4
0
    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)
Beispiel #5
0
    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)
Beispiel #6
0
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)
Beispiel #7
0
 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)
Beispiel #8
0
    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)
Beispiel #9
0
    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, )