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

Roy de Goei
committed
# Don't use Ordering class from the django_filters but use rest_framework instead !!
from rest_framework.filters import OrderingFilter

Roy de Goei
committed
class subTaskFilter(filters.FilterSet):
class Meta:
model = Subtask
fields = {
'state__value': ['exact'],

Roy de Goei
committed
'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

Jorrit Schaap
committed
from datetime import datetime

Jorrit Schaap
committed
from lofar.common.json_utils import get_default_json_object_for_schema

Jorrit Schaap
committed
from lofar.common.datetimeutils import formatDatetime

Jorrit Schaap
committed
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):
Jörn Künsemöller
committed
def get_queryset(self):
queryset = models.SubtaskStateLog.objects.all()
# query by subtask
subtask = self.request.query_params.get('subtask', None)
if subtask is not None:
return queryset.filter(subtask=subtask)
return queryset
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

Roy de Goei
committed
filter_backends = (filters.DjangoFilterBackend, OrderingFilter,)

Roy de Goei
committed
ordering = ('start_time',)
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)

Jorrit Schaap
committed
parset_str = "# THIS PARSET WAS GENERATED BY TMSS FROM THE SPECICATION OF SUBTASK ID=%d ON %s url: %s\n%s" % (
subtask.pk,
formatDatetime(datetime.utcnow()),
request._request.get_raw_uri(),
parset,)
return HttpResponse(parset_str, content_type='text/plain')