From d07ebc53487751484494b66286519da7754d8714 Mon Sep 17 00:00:00 2001 From: Jorrit Schaap <schaap@astron.nl> Date: Fri, 28 Aug 2020 12:37:41 +0200 Subject: [PATCH] TMSS-272: derive from common AbstractTemplateViewSet which implements common actions to get the schema or a default json blob --- .../tmss/tmssapp/viewsets/lofar_viewset.py | 27 +++++++- .../src/tmss/tmssapp/viewsets/scheduling.py | 26 ++----- .../tmss/tmssapp/viewsets/specification.py | 67 ++----------------- 3 files changed, 38 insertions(+), 82 deletions(-) diff --git a/SAS/TMSS/src/tmss/tmssapp/viewsets/lofar_viewset.py b/SAS/TMSS/src/tmss/tmssapp/viewsets/lofar_viewset.py index 017d8e13c90..977fc934165 100644 --- a/SAS/TMSS/src/tmss/tmssapp/viewsets/lofar_viewset.py +++ b/SAS/TMSS/src/tmss/tmssapp/viewsets/lofar_viewset.py @@ -8,6 +8,10 @@ Adds the following functionality: from rest_framework import viewsets from drf_yasg.utils import swagger_auto_schema from rest_framework import mixins +from django.shortcuts import get_object_or_404 +from django.http import JsonResponse +from rest_framework.decorators import action +from lofar.common.json_utils import get_default_json_object_for_schema class LOFARViewSet(viewsets.ModelViewSet): """ @@ -50,4 +54,25 @@ class LOFARNestedViewSet(mixins.CreateModelMixin, @swagger_auto_schema(responses={400: 'invalid specification', 403: 'forbidden'}) def create(self, request, **kwargs): - return super(LOFARNestedViewSet, self).create(request, **kwargs) \ No newline at end of file + return super(LOFARNestedViewSet, self).create(request, **kwargs) + + +class AbstractTemplateViewSet(LOFARViewSet): + @swagger_auto_schema(responses={200: 'The schema as a JSON object', + 403: 'forbidden'}, + operation_description="Get the schema as a JSON object.") + @action(methods=['get'], detail=True) + def schema(self, request, pk=None): + template = get_object_or_404(self.queryset.model, pk=pk) + return JsonResponse(template.schema) + + @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(self, request, pk=None): + template = get_object_or_404(self.queryset.model, pk=pk) + spec = get_default_json_object_for_schema(template.schema) + return JsonResponse(spec) + + diff --git a/SAS/TMSS/src/tmss/tmssapp/viewsets/scheduling.py b/SAS/TMSS/src/tmss/tmssapp/viewsets/scheduling.py index e1ce15a72ab..72373992512 100644 --- a/SAS/TMSS/src/tmss/tmssapp/viewsets/scheduling.py +++ b/SAS/TMSS/src/tmss/tmssapp/viewsets/scheduling.py @@ -4,7 +4,7 @@ This file contains the viewsets (based on the elsewhere defined data models and from django.shortcuts import get_object_or_404 from rest_framework import viewsets -from .lofar_viewset import LOFARViewSet, LOFARNestedViewSet +from .lofar_viewset import LOFARViewSet, LOFARNestedViewSet, AbstractTemplateViewSet from .. import models from .. import serializers from django_filters import rest_framework as filters @@ -88,7 +88,7 @@ class SubtaskTemplateFilter(filters.FilterSet): 'version': ['lt', 'gt', 'exact'] } -class SubtaskTemplateViewSet(LOFARViewSet): +class SubtaskTemplateViewSet(AbstractTemplateViewSet): queryset = models.SubtaskTemplate.objects.all() serializer_class = serializers.SubtaskTemplateSerializer filter_class = SubtaskTemplateFilter @@ -103,30 +103,13 @@ class SubtaskTemplateViewSet(LOFARViewSet): return queryset - @swagger_auto_schema(responses={200: 'The schema as a JSON object', - 403: 'forbidden'}, - operation_description="Get the schema as a JSON object.") - @action(methods=['get'], detail=True) - def schema(self, request, pk=None): - subtask_template = get_object_or_404(models.SubtaskTemplate, pk=pk) - return JsonResponse(subtask_template.schema) - - @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) - class DefaultSubtaskTemplateViewSet(LOFARViewSet): queryset = models.DefaultSubtaskTemplate.objects.all() serializer_class = serializers.DefaultSubtaskTemplateSerializer -class DataproductSpecificationsTemplateViewSet(LOFARViewSet): +class DataproductSpecificationsTemplateViewSet(AbstractTemplateViewSet): queryset = models.DataproductSpecificationsTemplate.objects.all() serializer_class = serializers.DataproductSpecificationsTemplateSerializer @@ -135,7 +118,8 @@ class DefaultDataproductSpecificationsTemplateViewSet(LOFARViewSet): queryset = models.DefaultDataproductSpecificationsTemplate.objects.all() serializer_class = serializers.DefaultDataproductSpecificationsTemplateSerializer -class DataproductFeedbackTemplateViewSet(LOFARViewSet): + +class DataproductFeedbackTemplateViewSet(AbstractTemplateViewSet): queryset = models.DataproductFeedbackTemplate.objects.all() serializer_class = serializers.DataproductFeedbackTemplateSerializer diff --git a/SAS/TMSS/src/tmss/tmssapp/viewsets/specification.py b/SAS/TMSS/src/tmss/tmssapp/viewsets/specification.py index 7749da4beba..bfc8ebf7f1a 100644 --- a/SAS/TMSS/src/tmss/tmssapp/viewsets/specification.py +++ b/SAS/TMSS/src/tmss/tmssapp/viewsets/specification.py @@ -3,7 +3,6 @@ This file contains the viewsets (based on the elsewhere defined data models and """ from django.shortcuts import get_object_or_404 -from django.http import JsonResponse from django.contrib.auth.models import User from django_filters import rest_framework as filters from rest_framework.viewsets import ReadOnlyModelViewSet @@ -16,7 +15,7 @@ from rest_framework.decorators import action from drf_yasg.utils import swagger_auto_schema -from lofar.sas.tmss.tmss.tmssapp.viewsets.lofar_viewset import LOFARViewSet, LOFARNestedViewSet +from lofar.sas.tmss.tmss.tmssapp.viewsets.lofar_viewset import LOFARViewSet, LOFARNestedViewSet, AbstractTemplateViewSet from lofar.sas.tmss.tmss.tmssapp import models from lofar.sas.tmss.tmss.tmssapp import serializers @@ -41,39 +40,12 @@ class TagsViewSet(LOFARViewSet): serializer_class = serializers.TagsSerializer -class CommonSchemaTemplateViewSet(LOFARViewSet): +class CommonSchemaTemplateViewSet(AbstractTemplateViewSet): queryset = models.CommonSchemaTemplate.objects.all() serializer_class = serializers.CommonSchemaTemplateSerializer - @swagger_auto_schema(responses={200: 'The schema as a JSON object', - 403: 'forbidden'}, - operation_description="Get the schema as a JSON object.") - @action(methods=['get'], detail=True) - def schema(self, request, pk=None): - template = get_object_or_404(models.CommonSchemaTemplate, pk=pk) - return JsonResponse(template.schema) - - @swagger_auto_schema(responses={200: 'The schema as a JSON object', - 403: 'forbidden'}, - operation_description="Get the schema as a JSON object.") - @action(methods=['get'], detail=True) - def resolved_schema(self, request, pk=None): - template = get_object_or_404(models.CommonSchemaTemplate, pk=pk) - base_url = "%s://%s" % (request.scheme, request.get_host()) - schema = json_utils.resolved_refs(template.schema) - return JsonResponse(schema) - - @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): - template = get_object_or_404(models.CommonSchemaTemplate, pk=pk) - spec = get_default_json_object_for_schema(template.schema) - return JsonResponse(spec) - -class GeneratorTemplateViewSet(LOFARViewSet): +class GeneratorTemplateViewSet(AbstractTemplateViewSet): queryset = models.GeneratorTemplate.objects.all() serializer_class = serializers.GeneratorTemplateSerializer @@ -90,20 +62,11 @@ class SchedulingUnitTemplateFilter(filters.FilterSet): 'version': ['lt', 'gt', 'exact'] } -class SchedulingUnitTemplateViewSet(LOFARViewSet): +class SchedulingUnitTemplateViewSet(AbstractTemplateViewSet): queryset = models.SchedulingUnitTemplate.objects.all() serializer_class = serializers.SchedulingUnitTemplateSerializer filter_class = SchedulingUnitTemplateFilter - @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): - schedulingunit_template = get_object_or_404(models.SchedulingUnitTemplate, pk=pk) - spec = get_default_json_object_for_schema(schedulingunit_template.schema) - return JsonResponse(spec) - class DefaultSchedulingUnitTemplateViewSet(LOFARViewSet): queryset = models.DefaultSchedulingUnitTemplate.objects.all() @@ -117,35 +80,19 @@ class TaskTemplateFilter(filters.FilterSet): 'version': ['lt', 'gt', 'exact'] } -class TaskTemplateViewSet(LOFARViewSet): + +class TaskTemplateViewSet(AbstractTemplateViewSet): queryset = models.TaskTemplate.objects.all() serializer_class = serializers.TaskTemplateSerializer filter_class = TaskTemplateFilter - @swagger_auto_schema(responses={200: 'The schema as a JSON object', - 403: 'forbidden'}, - operation_description="Get the schema as a JSON object.") - @action(methods=['get'], detail=True) - def schema(self, request, pk=None): - template = get_object_or_404(models.TaskTemplate, pk=pk) - return JsonResponse(template.schema) - - @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): - template = get_object_or_404(models.TaskTemplate, pk=pk) - spec = get_default_json_object_for_schema(template.schema) - return JsonResponse(spec) - class DefaultTaskTemplateViewSet(LOFARViewSet): queryset = models.DefaultTaskTemplate.objects.all() serializer_class = serializers.DefaultTaskTemplateSerializer -class TaskRelationSelectionTemplateViewSet(LOFARViewSet): +class TaskRelationSelectionTemplateViewSet(AbstractTemplateViewSet): queryset = models.TaskRelationSelectionTemplate.objects.all() serializer_class = serializers.TaskRelationSelectionTemplateSerializer -- GitLab