Source code for incoming_libraries.views

import logging
import itertools

from django.apps import apps
from django.db.models import Prefetch

from rest_framework import viewsets
from rest_framework.response import Response
from rest_framework.permissions import IsAdminUser

from common.mixins import LibrarySampleMultiEditMixin
from .serializers import RequestSerializer, LibrarySerializer, SampleSerializer

Request = apps.get_model('request', 'Request')
Library = apps.get_model('library', 'Library')
Sample = apps.get_model('sample', 'Sample')

logger = logging.getLogger('db')


[docs]class IncomingLibrariesViewSet(LibrarySampleMultiEditMixin, viewsets.ViewSet): permission_classes = [IsAdminUser] library_model = Library sample_model = Sample library_serializer = LibrarySerializer sample_serializer = SampleSerializer
[docs] def list(self, request): """ Get the list of all incoming libraries and samples. """ libraries_qs = Library.objects.select_related( 'library_protocol', 'concentration_method', ).filter(status=1) samples_qs = Sample.objects.select_related( 'library_protocol', 'concentration_method', 'nucleic_acid_type', ).filter(status=1) queryset = Request.objects.prefetch_related( Prefetch('libraries', queryset=libraries_qs), Prefetch('samples', queryset=samples_qs), ).order_by('-create_time') serializer = RequestSerializer(queryset, many=True) data = list(itertools.chain(*serializer.data)) data = sorted(data, key=lambda x: x['barcode'][3:]) return Response(data)