You need to sign in or sign up before continuing.
Newer
Older
"""
This file contains the viewsets (based on the elsewhere defined data models and serializers)
"""
from django.shortcuts import get_object_or_404
from rest_framework import viewsets
from .. import models
from .. import serializers
from django_filters import rest_framework as filters

Roy de Goei
committed
from lofar.sas.tmss.tmss.tmssapp.models.scheduling import Subtask
class subTaskFilter(filters.FilterSet):
class Meta:
model = Subtask
fields = {
'start_time': ['lt', 'gt'],
'stop_time': ['lt', 'gt'],
'cluster__name': ['exact', 'icontains'],
}

Jorrit Schaap
committed
from rest_framework.decorators import action
from django.http import HttpResponse, JsonResponse
from drf_yasg.utils import swagger_auto_schema
from lofar.sas.tmss.tmss.tmssapp.viewsets.lofar_viewset import LOFARViewSet
from lofar.sas.tmss.tmss.tmssapp import models
from lofar.sas.tmss.tmss.tmssapp import serializers
from lofar.common.json_utils import get_default_json_object_for_schema
from lofar.sas.tmss.tmss.tmssapp.adapters.parset import convert_to_parset

Jan David Mol
committed
class SubtaskConnectorViewSet(LOFARViewSet):
Jörn Künsemöller
committed
queryset = models.SubtaskConnector.objects.all()
serializer_class = serializers.SubtaskConnectorSerializer
class SubtaskStateViewSet(LOFARViewSet):
queryset = models.SubtaskState.objects.all()
serializer_class = serializers.SubtaskStateSerializer
class SubtaskStateLogViewSet(LOFARViewSet):
queryset = models.SubtaskStateLog.objects.all()
serializer_class = serializers.SubtaskStateLogSerializer
class SubtaskTypeViewSet(LOFARViewSet):
queryset = models.SubtaskType.objects.all()
serializer_class = serializers.SubtaskTypeSerializer
class StationTypeViewSet(LOFARViewSet):
queryset = models.StationType.objects.all()
serializer_class = serializers.StationTypeSerializer

Jan David Mol
committed
class AlgorithmViewSet(LOFARViewSet):
queryset = models.Algorithm.objects.all()
serializer_class = serializers.AlgorithmSerializer

Jan David Mol
committed
class ScheduleMethodViewSet(LOFARViewSet):
queryset = models.ScheduleMethod.objects.all()
serializer_class = serializers.ScheduleMethodSerializer

Jan David Mol
committed
class SubtaskTemplateViewSet(LOFARViewSet):
Jörn Künsemöller
committed
queryset = models.SubtaskTemplate.objects.all()
serializer_class = serializers.SubtaskTemplateSerializer
def get_queryset(self):
queryset = models.SubtaskTemplate.objects.all()
# query by name
name = self.request.query_params.get('name', None)
if name is not None:
return queryset.filter(name=name)
return queryset

Jorrit Schaap
committed
@swagger_auto_schema(responses={200: 'JSON object with all the defaults from the schema filled in',
403: 'forbidden'},
operation_description="Get a JSON object with all the defaults from the schema filled in.")
@action(methods=['get'], detail=True)
def default_specification(self, request, pk=None):
subtask_template = get_object_or_404(models.SubtaskTemplate, pk=pk)
spec = get_default_json_object_for_schema(subtask_template.schema)
return JsonResponse(spec)

Jan David Mol
committed
class DefaultSubtaskTemplateViewSet(LOFARViewSet):
Jörn Künsemöller
committed
queryset = models.DefaultSubtaskTemplate.objects.all()
serializer_class = serializers.DefaultSubtaskTemplateSerializer

Jan David Mol
committed
class DataproductSpecificationsTemplateViewSet(LOFARViewSet):
queryset = models.DataproductSpecificationsTemplate.objects.all()
serializer_class = serializers.DataproductSpecificationsTemplateSerializer

Jan David Mol
committed
class DefaultDataproductSpecificationsTemplateViewSet(LOFARViewSet):
queryset = models.DefaultDataproductSpecificationsTemplate.objects.all()
serializer_class = serializers.DefaultDataproductSpecificationsTemplateSerializer

Jan David Mol
committed
class SubtaskInputSelectionTemplateViewSet(LOFARViewSet):
queryset = models.SubtaskInputSelectionTemplate.objects.all()
serializer_class = serializers.SubtaskInputSelectionTemplateSerializer

Jan David Mol
committed
class DataproductFeedbackTemplateViewSet(LOFARViewSet):
queryset = models.DataproductFeedbackTemplate.objects.all()
serializer_class = serializers.DataproductFeedbackTemplateSerializer

Jan David Mol
committed
class SubtaskViewSet(LOFARViewSet):
Jörn Künsemöller
committed
queryset = models.Subtask.objects.all()
serializer_class = serializers.SubtaskSerializer

Roy de Goei
committed
filter_backends = (filters.DjangoFilterBackend,)
filter_class = subTaskFilter
def get_queryset(self):
if 'task_blueprint_pk' in self.kwargs:
task_blueprint = get_object_or_404(models.TaskBlueprint, pk=self.kwargs['task_blueprint_pk'])
return task_blueprint.subtasks.all()
else:
return models.Subtask.objects.all()

Jorrit Schaap
committed
@swagger_auto_schema(responses={200: 'A LOFAR parset for this subtask',
403: 'forbidden'},
operation_description="Get a a LOFAR parset for the specifications of this subtask")
@action(methods=['get'], detail=True)
def default_specification(self, request, pk=None):
subtask = get_object_or_404(models.Subtask, pk=pk)
parset = convert_to_parset(subtask)
return HttpResponse(str(parset), content_type='text/plain')

Jan David Mol
committed
class SubtaskInputViewSet(LOFARViewSet):
Jörn Künsemöller
committed
queryset = models.SubtaskInput.objects.all()
serializer_class = serializers.SubtaskInputSerializer

Jan David Mol
committed
class SubtaskOutputViewSet(LOFARViewSet):
Jörn Künsemöller
committed
queryset = models.SubtaskOutput.objects.all()
serializer_class = serializers.SubtaskOutputSerializer
class DataproductViewSet(LOFARViewSet):
queryset = models.Dataproduct.objects.all()
serializer_class = serializers.DataproductSerializer
class AntennaSetViewSet(LOFARViewSet):
queryset = models.AntennaSet.objects.all()
serializer_class = serializers.AntennaSetSerializer

Jan David Mol
committed
class DataproductTransformViewSet(LOFARViewSet):
Jörn Künsemöller
committed
queryset = models.DataproductTransform.objects.all()
serializer_class = serializers.DataproductTransformSerializer

Jan David Mol
committed
class FilesystemViewSet(LOFARViewSet):
Jörn Künsemöller
committed
queryset = models.Filesystem.objects.all()
serializer_class = serializers.FilesystemSerializer

Jan David Mol
committed
class ClusterViewSet(LOFARViewSet):
Jörn Künsemöller
committed
queryset = models.Cluster.objects.all()
serializer_class = serializers.ClusterSerializer

Jan David Mol
committed
class DataproductArchiveInfoViewSet(LOFARViewSet):
Jörn Künsemöller
committed
queryset = models.DataproductArchiveInfo.objects.all()
serializer_class = serializers.DataproductArchiveInfoSerializer

Jan David Mol
committed
class DataproductHashViewSet(LOFARViewSet):
Jörn Künsemöller
committed
queryset = models.DataproductHash.objects.all()
serializer_class = serializers.DataproductHashSerializer
Jörn Künsemöller
committed
# --- JSON
class SubtaskViewSetJSONeditorOnline(LOFARViewSet):
queryset = models.Subtask.objects.all()
serializer_class = serializers.SubtaskSerializerJSONeditorOnline
filter_backends = (filters.DjangoFilterBackend,)
filter_class = subTaskFilter
Jörn Künsemöller
committed
def get_view_name(self): # override name because DRF auto-naming dot_tmssapp_scheduling_djangoes not produce something usable here
Jörn Künsemöller
committed
name = "Subtask"
if self.suffix:
name += ' ' + self.suffix
return name
Jörn Künsemöller
committed
def get_queryset(self):
if 'task_blueprint_pk' in self.kwargs:
task_blueprint = get_object_or_404(models.TaskBlueprint, pk=self.kwargs['task_blueprint_pk'])
return task_blueprint.subtasks.all()
else:
return models.Subtask.objects.all()

Jorrit Schaap
committed
@swagger_auto_schema(responses={200: 'A LOFAR parset for this subtask (as plain text, not json)',
403: 'forbidden',
404: 'Not found'},
operation_description="Get a LOFAR parset for the specifications of this subtask")
@action(methods=['get'], detail=True)
def parset(self, request, pk=None):
subtask = get_object_or_404(models.Subtask, pk=pk)
parset = convert_to_parset(subtask)
return HttpResponse(str(parset), content_type='text/plain')