Exemple #1
0
    def filter_queryset(self, request, queryset, view):
        ''' Override this method to request just the documents required from elastic. '''
        q_size = view.paginator.get_limit(request)
        q_from = view.paginator.get_offset(request)

        filterable = getattr(view, 'filter_fields', [])
        filters = dict([(k, v) for k, v in request.GET.items()
                        if k in filterable])
        search_filters = self._build_filters(filters=filters)
        if search_filters is not None:
            q = ElasticQuery.filtered(Query.match_all(), search_filters)
        else:
            q = ElasticQuery(Query.match_all())
        s = Search(search_query=q,
                   idx=getattr(view, 'idx'),
                   size=q_size,
                   search_from=q_from)
        json_results = s.get_json_response()
        results = []
        for result in json_results['hits']['hits']:
            new_obj = ElasticObject(initial=result['_source'])
            new_obj.uuid = result['_id']
            results.append(new_obj)
        view.es_count = json_results['hits']['total']
        return results
    def filter_queryset(self, request, queryset, view):
        ''' Override this method to request just the documents required from elastic. '''
        q_size = view.paginator.get_limit(request)
        q_from = view.paginator.get_offset(request)

        filterable = getattr(view, 'filter_fields', [])
        print(filterable)
        print(request)
        filters = dict([(k, v) for k, v in request.GET.items() if k in filterable])
        criteria_idx = self._get_index(filters.get('feature_type', 'GENE_CRITERIA'))

        idx = criteria_idx
        if type(criteria_idx) == list:
            idx = ','.join(ElasticSettings.idx(name) for name in criteria_idx)
        else:
            idx = ElasticSettings.idx(criteria_idx)

        q = ElasticQuery(Query.match_all())
        s = Search(search_query=q, idx=idx, size=q_size, search_from=q_from)
        json_results = s.get_json_response()
        results = []
        for result in json_results['hits']['hits']:
            new_obj = ElasticObject(initial=result['_source'])
            new_obj.uuid = result['_id']
            new_obj.criteria_type = result['_type']
            results.append(new_obj)
        view.es_count = json_results['hits']['total']
        return results
Exemple #3
0
    def get_object(self):
        q = ElasticQuery(Query.ids(self.kwargs[self.lookup_field]))
        s = Search(search_query=q, idx=getattr(self, 'idx'))
        try:
            result = s.get_json_response()['hits']['hits'][0]
            obj = ElasticObject(initial=result['_source'])
            obj.uuid = result['_id']

            # May raise a permission denied
            self.check_object_permissions(self.request, obj)
            return obj
        except (TypeError, ValueError, IndexError):
            raise Http404
    def get_object(self):
        q = ElasticQuery(Query.ids(self.kwargs[self.lookup_field]))
        s = Search(search_query=q, idx=getattr(self, 'idx'))
        try:
            result = s.get_json_response()['hits']['hits'][0]
            obj = ElasticObject(initial=result['_source'])
            obj.uuid = result['_id']
            obj.criteria_type = result['_type']

            # May raise a permission denied
            self.check_object_permissions(self.request, obj)
            return obj
        except (TypeError, ValueError, IndexError):
            raise Http404
    def filter_queryset(self, request, queryset, view):
        ''' Override this method to request just the documents required from elastic. '''
        q_size = view.paginator.get_limit(request)
        q_from = view.paginator.get_offset(request)

        filterable = getattr(view, 'filter_fields', [])
        filters = dict([(k, v) for k, v in request.GET.items() if k in filterable])
        criteria_idx = self._get_index(filters.get('feature_type', 'GENE_CRITERIA'))

        feature_type = filters.get('feature_type')
        feature_id = filters.get('feature_id')
        aggregate = filters.get('aggregate')
        detail = filters.get('detail')

        idx = criteria_idx
        if type(criteria_idx) == list:
            idx = ','.join(ElasticSettings.idx(name) for name in criteria_idx)
        else:
            idx = ElasticSettings.idx(criteria_idx)

        results = []
        if feature_id and aggregate == 'true':
            disease_doc_tags = Criteria.get_disease_tags(feature_id, idx=idx)
            disease_tags = [getattr(d, 'code') for d in disease_doc_tags]
            new_obj = ElasticObject()
            new_obj.qid = feature_id
            new_obj.disease_tags = disease_tags
            new_obj.criteria_type = None
            results.append(new_obj)
            return results
        elif feature_id and detail == 'true':
            (idx, idx_types) = Criteria.get_feature_idx_n_idxtypes(feature_type.lower())
            criteria_details = Criteria.get_criteria_details(feature_id, idx=idx, idx_type=idx_types)
            criteria_list = idx_types.split(',')
            criteria_details_expanded = Criteria.add_meta_info(idx, criteria_list, criteria_details)

            feature_details = self._get_feature_details(criteria_details_expanded)

            for criteria, details in feature_details.items():
                print(criteria)
                new_obj = ElasticObject()
                new_obj.qid = details['qid']
                new_obj.criteria_type = criteria
                disease_tags = details['disease_tags']
                fdetails = list(details['fdetails'])
                print('+++++++++++++++')
                print(disease_tags)
                print(fdetails)
                print('+++++++++++++++')
                new_obj.disease_tags = disease_tags
                new_obj.feature_details = fdetails
                results.append(new_obj)

            return results
        else:
            q = ElasticQuery(Query.match_all())
            s = Search(search_query=q, idx=idx, size=q_size, search_from=q_from)
            json_results = s.get_json_response()

            for result in json_results['hits']['hits']:
                new_obj = ElasticObject(initial=result['_source'])
                new_obj.uuid = result['_id']
                new_obj.criteria_type = result['_type']
                results.append(new_obj)

            view.es_count = json_results['hits']['total']
            return results