initial attempt to use django restframework
[htsworkflow.git] / samples / views.py
index 3b5ea350e2289e16d7474bec221580d8175311b4..78cd0ba0c6f5d838cc46fae8d243274cb2ac9c53 100644 (file)
@@ -12,12 +12,22 @@ from django.template import RequestContext
 from django.template.loader import get_template
 from django.contrib.auth.decorators import login_required
 
+from rest_framework import viewsets
+from rest_framework.response import Response
+from rest_framework.renderers import (TemplateHTMLRenderer,
+                                      JSONRenderer,
+                                      BrowsableAPIRenderer)
+
 from htsworkflow.auth import require_api_key
 from experiments.models import FlowCell, LANE_STATUS_MAP
 from .changelist import HTSChangeList
 from .models import Antibody, Library, Species
 from .admin import LibraryOptions
 from .results import get_flowcell_result_dict
+from .serializers import (ExperimentTypeSerializer,
+                          LibrarySerializer,
+                          SpeciesSerializer)
+
 from bcmagic.forms import BarcodeMagicForm
 from htsworkflow.pipelines import runfolder
 from htsworkflow.pipelines.samplekey import SampleKey
@@ -451,26 +461,62 @@ def library_json(request, library_id):
     return HttpResponse(lib_json, content_type='application/json')
 
 
-@csrf_exempt
-def species_json(request, species_id):
-    """
-    Return information about a species.
-    """
-    raise Http404
-
-
-def species(request, species_id):
-    species = get_object_or_404(Species, id=species_id)
-
-    context = RequestContext(request,
-                             {'species': species})
-
-    return render_to_response("samples/species_detail.html", context)
+class LibraryViewSet(viewsets.ReadOnlyModelViewSet):
+    renderer_classes = (TemplateHTMLRenderer,
+                        BrowsableAPIRenderer,
+                        JSONRenderer)
+    queryset = Library.objects.all()
+    serializer_class = LibrarySerializer
+    pagination_class = 'rest_framework.pagination.LimitOffsetPagination'
+    default_limit = 50
+    template_name = 'samples/library_detail.html'
+
+
+class ExperimentTypeViewSet(viewsets.ReadOnlyModelViewSet):
+    renderer_classes = (BrowsableAPIRenderer,
+                        JSONRenderer)
+    queryset = ExperimentType.objects.all()
+    serializer_class = ExperimentTypeSerializer
+
+#@csrf_exempt
+#def species_json(request, species_id):
+#    """
+#    Return information about a species.
+#    """
+#    raise Http404
+#
+#
+#def species(request, species_id):
+#    species = get_object_or_404(Species, id=species_id)
+#
+#    context = RequestContext(request,
+#                             {'species': species})
+#
+#    return render_to_response("samples/species_detail.html", context)
+#
+
+class SpeciesViewSet(viewsets.ReadOnlyModelViewSet):
+    renderer_classes = (TemplateHTMLRenderer,
+                        BrowsableAPIRenderer,
+                        JSONRenderer)
+    queryset = Species.objects.all()
+    serializer_class = SpeciesSerializer
+    template_name = 'samples/species_detail.html'
+
+    def list(self, request, format=format):
+        queryset = Species.objects.all()
+        serializer = self.serializer_class(
+            queryset,
+            many=True,
+            context={'request': request})
+        return Response({'species': serializer.data},
+                        template_name='samples/species_list.html')
 
 
 def antibodies(request):
-    context = RequestContext(request,
-                             {'antibodies': Antibody.objects.order_by('antigene')})
+    context = RequestContext(
+        request,
+        {'antibodies': Antibody.objects.order_by('antigene')})
     return render_to_response("samples/antibody_index.html", context)