Source code for pangea.core.search


import structlog

from haystack.query import SearchQuerySet
from rest_framework.views import APIView
from rest_framework.response import Response

from .serializers import (
    SampleSerializer,
    SampleGroupSerializer,
    OrganizationSerializer,
)

logger = structlog.get_logger(__name__)


[docs]class SearchList(APIView):
[docs] def get(self, request, format=None): query = request.GET.get('query', '') try: if query: sqs = SearchQuerySet().filter(name=query) else: sqs = SearchQuerySet().all() except: logger.exception('search_failed', query=query) raise def filter_serialize(model_name, serializer): return [serializer(res.object).data for res in sqs if res.model_name == model_name] result = { 'query': query, 'samples': filter_serialize('sample', SampleSerializer), 'sample_groups': filter_serialize('samplegroup', SampleGroupSerializer), 'organizations': filter_serialize('organization', OrganizationSerializer), } logger.info( 'conducted_search', query=query, n_sample_results=len(result['samples']), n_sample_group_results=len(result['sample_groups']), n_organization_results=len(result['organizations']), ) return Response(result)