diff --git a/SAS/TMSS/backend/src/tmss/tmssapp/serializers/scheduling.py b/SAS/TMSS/backend/src/tmss/tmssapp/serializers/scheduling.py index 9ab1d2ef17be6657a460f535e9f1744f88467858..1b6e0d0fff95efaef6b2eaeed0314d84c104640a 100644 --- a/SAS/TMSS/backend/src/tmss/tmssapp/serializers/scheduling.py +++ b/SAS/TMSS/backend/src/tmss/tmssapp/serializers/scheduling.py @@ -85,16 +85,17 @@ class SubtaskSerializer(DynamicRelationalHyperlinkedModelSerializer): class SubtaskInputSerializer(DynamicRelationalHyperlinkedModelSerializer): selection_doc = JSONEditorField(schema_source='selection_template.schema') - input_role = TaskConnectorTypeSerializer(read_only=True, help_text='The connector type which defines what kind of data this subtask consumes.') class Meta: model = models.SubtaskInput fields = '__all__' -class SubtaskOutputSerializer(DynamicRelationalHyperlinkedModelSerializer): - output_role = TaskConnectorTypeSerializer(read_only=True, help_text='The connector type which defines what kind of data this subtask produces.') +class SubtaskInputExtendedSerializer(SubtaskInputSerializer): + input_role = TaskConnectorTypeSerializer(read_only=True, help_text='The connector type which defines what kind of data this subtask consumes.') + +class SubtaskOutputSerializer(DynamicRelationalHyperlinkedModelSerializer): class Meta: model = models.SubtaskOutput fields = '__all__' @@ -102,6 +103,15 @@ class SubtaskOutputSerializer(DynamicRelationalHyperlinkedModelSerializer): read_only_fields = ['dataproducts', 'consumers'] +class SubtaskOutputExtendedSerializer(SubtaskOutputSerializer): + output_role = TaskConnectorTypeSerializer(read_only=True, help_text='The connector type which defines what kind of data this subtask produces.') + + +class SubtaskExtendedSerializer(SubtaskSerializer): + inputs = SubtaskInputExtendedSerializer(read_only=True, many=True) + outputs = SubtaskOutputExtendedSerializer(read_only=True, many=True) + + class DataproductSerializer(DynamicRelationalHyperlinkedModelSerializer): specifications_doc = JSONEditorField(schema_source='specifications_template.schema') feedback_doc = JSONEditorField(schema_source='feedback_template.schema') diff --git a/SAS/TMSS/backend/src/tmss/tmssapp/serializers/specification.py b/SAS/TMSS/backend/src/tmss/tmssapp/serializers/specification.py index 14c808118accba01aa322ec7afccf56557a3d358..799f1278bef510ddaeb00b411c31f57379988f0e 100644 --- a/SAS/TMSS/backend/src/tmss/tmssapp/serializers/specification.py +++ b/SAS/TMSS/backend/src/tmss/tmssapp/serializers/specification.py @@ -4,7 +4,7 @@ This file contains the serializers (for the elsewhere defined data models) from rest_framework import serializers from .. import models -from .scheduling import SubtaskSerializer +from .scheduling import SubtaskSerializer, SubtaskExtendedSerializer from .common import FloatDurationField, RelationalHyperlinkedModelSerializer, AbstractTemplateSerializer, DynamicRelationalHyperlinkedModelSerializer, TaskConnectorTypeSerializer from .widgets import JSONEditorField from ..models import TMSSUser as User @@ -64,13 +64,15 @@ class SchedulingConstraintsTemplateSerializer(AbstractTemplateSerializer): class TaskTemplateSerializer(AbstractTemplateSerializer): - connector_types = TaskConnectorTypeSerializer(many=True, read_only=True, help_text='The connector types which define what kind of data this task template consumes/produces.') - class Meta: model = models.TaskTemplate fields = '__all__' +class TaskTemplateExtendedSerializer(TaskTemplateSerializer): + connector_types = TaskConnectorTypeSerializer(many=True, read_only=True, help_text='The connector types which define what kind of data this task template consumes/produces.') + + class TaskRelationSelectionTemplateSerializer(AbstractTemplateSerializer): class Meta: model = models.TaskRelationSelectionTemplate @@ -296,8 +298,6 @@ class TaskBlueprintSerializer(DynamicRelationalHyperlinkedModelSerializer): class TaskRelationDraftSerializer(DynamicRelationalHyperlinkedModelSerializer): selection_doc = JSONEditorField(schema_source='selection_template.schema') - input_role = TaskConnectorTypeSerializer(read_only=True, help_text='The connector type which defines what kind of data this subtask consumes.') - output_role = TaskConnectorTypeSerializer(read_only=True, help_text='The connector type which defines what kind of data this subtask produces.') class Meta: model = models.TaskRelationDraft @@ -305,16 +305,24 @@ class TaskRelationDraftSerializer(DynamicRelationalHyperlinkedModelSerializer): extra_fields = ['blueprints'] +class TaskRelationDraftExtendedSerializer(TaskRelationDraftSerializer): + input_role = TaskConnectorTypeSerializer(help_text='The connector type which defines what kind of data this subtask consumes.') + output_role = TaskConnectorTypeSerializer(help_text='The connector type which defines what kind of data this subtask produces.') + + class TaskRelationBlueprintSerializer(DynamicRelationalHyperlinkedModelSerializer): selection_doc = JSONEditorField(schema_source='selection_template.schema') - input_role = TaskConnectorTypeSerializer(read_only=True, help_text='The connector type which defines what kind of data this subtask consumes.') - output_role = TaskConnectorTypeSerializer(read_only=True, help_text='The connector type which defines what kind of data this subtask produces.') class Meta: model = models.TaskRelationBlueprint fields = '__all__' +class TaskRelationBlueprintExtendedSerializer(TaskRelationBlueprintSerializer): + input_role = TaskConnectorTypeSerializer(read_only=True, help_text='The connector type which defines what kind of data this subtask consumes.') + output_role = TaskConnectorTypeSerializer(read_only=True, help_text='The connector type which defines what kind of data this subtask produces.') + + class TaskSchedulingRelationDraftSerializer(DynamicRelationalHyperlinkedModelSerializer): class Meta: model = models.TaskSchedulingRelationDraft @@ -369,8 +377,8 @@ class TaskBlueprintExtendedSerializer(TaskBlueprintSerializer): expanded into the json response for a single API call (for convenience/optimization). """ - subtasks = SubtaskSerializer(many=True) # we set many=True because this field represents a sth-to-many relationship, i.e. we serialize a list of objects here - specifications_template = TaskTemplateSerializer() + subtasks = SubtaskExtendedSerializer(many=True) # we set many=True because this field represents a sth-to-many relationship, i.e. we serialize a list of objects here + specifications_template = TaskTemplateExtendedSerializer() class TaskDraftExtendedSerializer(TaskDraftSerializer): @@ -379,7 +387,6 @@ class TaskDraftExtendedSerializer(TaskDraftSerializer): expanded into the json response for a single API call (for convenience/optimization). """ task_blueprints = TaskBlueprintExtendedSerializer(many=True) - specifications_template = TaskTemplateSerializer() class SchedulingUnitDraftExtendedSerializer(SchedulingUnitDraftSerializer): diff --git a/SAS/TMSS/backend/src/tmss/tmssapp/viewsets/scheduling.py b/SAS/TMSS/backend/src/tmss/tmssapp/viewsets/scheduling.py index d03c2a6cecebe5e58869b55be82d137d379b2d03..eb80e6ab170a58caf070aafd946c01c84bae8481 100644 --- a/SAS/TMSS/backend/src/tmss/tmssapp/viewsets/scheduling.py +++ b/SAS/TMSS/backend/src/tmss/tmssapp/viewsets/scheduling.py @@ -381,6 +381,10 @@ class SubtaskViewSet(LOFARViewSet): return JsonResponse({'id': subtask.id, 'progress': subtask.progress}) +class SubtaskExtendedViewSet(SubtaskViewSet): + serializer_class = serializers.SubtaskExtendedSerializer + + class SubtaskNestedViewSet(LOFARNestedViewSet): queryset = models.Subtask.objects.all() serializer_class = serializers.SubtaskSerializer @@ -401,11 +405,19 @@ class SubtaskInputViewSet(LOFARViewSet): serializer_class = serializers.SubtaskInputSerializer +class SubtaskInputExtendedViewSet(SubtaskInputViewSet): + serializer_class = serializers.SubtaskInputExtendedSerializer + + class SubtaskOutputViewSet(LOFARViewSet): queryset = models.SubtaskOutput.objects.all() serializer_class = serializers.SubtaskOutputSerializer +class SubtaskOutputExtendedViewSet(SubtaskOutputViewSet): + serializer_class = serializers.SubtaskOutputExtendedSerializer + + class DataproductViewSet(LOFARViewSet): queryset = models.Dataproduct.objects.all() serializer_class = serializers.DataproductSerializer diff --git a/SAS/TMSS/backend/src/tmss/tmssapp/viewsets/specification.py b/SAS/TMSS/backend/src/tmss/tmssapp/viewsets/specification.py index 87b0fb972f0e28a9deab1cdbf8b3b186e4c21dfd..c5278d02b9f29f4781c9d927cbb912270b9e54bc 100644 --- a/SAS/TMSS/backend/src/tmss/tmssapp/viewsets/specification.py +++ b/SAS/TMSS/backend/src/tmss/tmssapp/viewsets/specification.py @@ -1199,6 +1199,10 @@ class TaskDraftViewSet(LOFARViewSet): return Response(serializer.data) +class TaskDraftExtendedViewSet(TaskDraftViewSet): + serializer_class = serializers.TaskDraftExtendedSerializer + + class TaskDraftNestedViewSet(LOFARNestedViewSet): queryset = models.TaskDraft.objects.all() serializer_class = serializers.TaskDraftSerializer @@ -1387,6 +1391,10 @@ class TaskBlueprintViewSet(LOFARViewSet): return RestResponse(serializer.data) +class TaskBlueprintExtendedViewSet(TaskBlueprintViewSet): + serializer_class = serializers.TaskBlueprintExtendedSerializer + + class TaskBlueprintNestedViewSet(LOFARNestedViewSet): queryset = models.TaskBlueprint.objects.all() serializer_class = serializers.TaskBlueprintSerializer @@ -1404,6 +1412,10 @@ class TaskRelationDraftViewSet(LOFARViewSet): serializer_class = serializers.TaskRelationDraftSerializer +class TaskRelationDraftExtendedViewSet(TaskRelationDraftViewSet): + serializer_class = serializers.TaskRelationDraftExtendedSerializer + + class TaskRelationDraftNestedViewSet(LOFARNestedViewSet): queryset = models.TaskRelationDraft.objects.all() serializer_class = serializers.TaskRelationDraftSerializer @@ -1421,6 +1433,10 @@ class TaskRelationBlueprintViewSet(LOFARViewSet): serializer_class = serializers.TaskRelationBlueprintSerializer +class TaskRelationBlueprintExtendedViewSet(TaskRelationBlueprintViewSet): + serializer_class = serializers.TaskRelationBlueprintExtendedSerializer + + class TaskSchedulingRelationBlueprintViewSet(LOFARViewSet): queryset = models.TaskSchedulingRelationBlueprint.objects.all() serializer_class = serializers.TaskSchedulingRelationBlueprintSerializer diff --git a/SAS/TMSS/backend/src/tmss/urls.py b/SAS/TMSS/backend/src/tmss/urls.py index 790db62e4ade2fcf3018ccd22d489144a6e89fca..2be2622bcc41a333ed3d37282e98cd4cc4cda4b6 100644 --- a/SAS/TMSS/backend/src/tmss/urls.py +++ b/SAS/TMSS/backend/src/tmss/urls.py @@ -168,7 +168,9 @@ router.register(r'scheduling_unit_draft_extended', viewsets.SchedulingUnitDraftE router.register(r'scheduling_unit_draft', viewsets.SchedulingUnitDraftViewSet) # ! The last registered view on a model is used for references to objects router.register(r'scheduling_unit_blueprint_extended', viewsets.SchedulingUnitBlueprintExtendedViewSet) router.register(r'scheduling_unit_blueprint', viewsets.SchedulingUnitBlueprintViewSet) # ! The last registered view on a model is used for references to objects +router.register(r'task_draft_extended', viewsets.TaskDraftExtendedViewSet) router.register(r'task_draft', viewsets.TaskDraftViewSet) +router.register(r'task_blueprint_extended', viewsets.TaskBlueprintExtendedViewSet) router.register(r'task_blueprint', viewsets.TaskBlueprintViewSet) router.register(r'task_relation_draft', viewsets.TaskRelationDraftViewSet) router.register(r'task_relation_blueprint', viewsets.TaskRelationBlueprintViewSet) @@ -203,9 +205,12 @@ router.register(r'dataproduct_feedback_template', viewsets.DataproductFeedbackTe router.register(r'sap_template', viewsets.SAPTemplateViewSet) # instances +router.register(r'subtask_extended', viewsets.SubtaskExtendedViewSet) router.register(r'subtask', viewsets.SubtaskViewSet) router.register(r'dataproduct', viewsets.DataproductViewSet) +router.register(r'subtask_input_extended', viewsets.SubtaskInputExtendedViewSet) router.register(r'subtask_input', viewsets.SubtaskInputViewSet) +router.register(r'subtask_output_extended', viewsets.SubtaskOutputExtendedViewSet) router.register(r'subtask_output', viewsets.SubtaskOutputViewSet) router.register(r'antenna_set', viewsets.AntennaSetViewSet) router.register(r'dataproduct_transform', viewsets.DataproductTransformViewSet)