From cdf34ce35d285706f8422db04c75a42974b5c9bb Mon Sep 17 00:00:00 2001 From: Fabio Roberto Vitello <fabio.vitello@inaf.it> Date: Wed, 17 Jun 2020 11:24:35 +0200 Subject: [PATCH] TMSS-50: new Task Scheduling Relation data models First version of Task Scheduling Relation (Draft & Blueprint) data models --- .../src/tmss/tmssapp/models/specification.py | 22 +++++++++++++++++++ .../tmss/tmssapp/serializers/specification.py | 21 ++++++++++++++++++ .../tmss/tmssapp/viewsets/specification.py | 10 ++++++++- SAS/TMSS/src/tmss/urls.py | 2 ++ 4 files changed, 54 insertions(+), 1 deletion(-) diff --git a/SAS/TMSS/src/tmss/tmssapp/models/specification.py b/SAS/TMSS/src/tmss/tmssapp/models/specification.py index 2956c3e09c5..225dde5cefc 100644 --- a/SAS/TMSS/src/tmss/tmssapp/models/specification.py +++ b/SAS/TMSS/src/tmss/tmssapp/models/specification.py @@ -131,6 +131,15 @@ class CopyReason(AbstractChoice): REPEATED = "repeated" +class SchedulingRelationPlacement(AbstractChoice): + """Defines how "first" must be places with respect to "second". One of BEFORE, AFTER, PARALLEL.""" + class Choices(Enum): + BEFORE = "before" + AFTER = "after" + PARALLEL = "paralle" + + + # concrete models class TaskConnector(BasicCommon): @@ -382,3 +391,16 @@ class TaskRelationBlueprint(BasicCommon): super().save(force_insert, force_update, using, update_fields) + +class TaskSchedulingRelationBlueprint(BasicCommon): + first = ForeignKey('TaskBlueprint', related_name='first_to_connect', on_delete=CASCADE, help_text='First Task Blueprint to connect.') + second = ForeignKey('TaskBlueprint', related_name='second_to_connect', on_delete=CASCADE, help_text='Second Task Blueprint to connect.') + placement = ForeignKey('SchedulingRelationPlacement', null=False, on_delete=PROTECT, help_text='Task scheduling relation placement.') + time_offset = IntegerField(default=0, help_text='Time offset of start of second task with respect to start of first task.') + +class TaskSchedulingRelationDraft(BasicCommon): + fist = ForeignKey('TaskDraft', related_name='first_to_connect', on_delete=CASCADE, help_text='First Task Draft to connect.') + second = ForeignKey('TaskDraft', related_name='second_to_connect', on_delete=CASCADE, help_text='Secind Task Draftto connect.') + placement = ForeignKey('SchedulingRelationPlacement', null=False, on_delete=PROTECT, help_text='Task scheduling relation placement.') + + time_offset = IntegerField(default=0, help_text='Time offset of start of second task with respect to start of first task.') \ No newline at end of file diff --git a/SAS/TMSS/src/tmss/tmssapp/serializers/specification.py b/SAS/TMSS/src/tmss/tmssapp/serializers/specification.py index a745c8e18e3..6c02a268017 100644 --- a/SAS/TMSS/src/tmss/tmssapp/serializers/specification.py +++ b/SAS/TMSS/src/tmss/tmssapp/serializers/specification.py @@ -267,3 +267,24 @@ class TaskRelationBlueprintSerializer(serializers.HyperlinkedModelSerializer): +class TaskSchedulingRelationDraftSerializer(RelationalHyperlinkedModelSerializer): + pass + +class TaskSchedulingRelationBlueprintSerializer(RelationalHyperlinkedModelSerializer): + # Create a JSON editor form to replace the simple text field based on the schema in the template that this + # draft refers to. If that fails, the JSONField remains a standard text input. + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + try: + self.fields['first'] = JSONEditorField(self.instance.selection_template.schema) + except Exception as e: + pass + + class Meta: + model = models.TaskSchedulingRelationBlueprint + fields = '__all__' + + + + + diff --git a/SAS/TMSS/src/tmss/tmssapp/viewsets/specification.py b/SAS/TMSS/src/tmss/tmssapp/viewsets/specification.py index 4516d434acb..f84917c922c 100644 --- a/SAS/TMSS/src/tmss/tmssapp/viewsets/specification.py +++ b/SAS/TMSS/src/tmss/tmssapp/viewsets/specification.py @@ -401,6 +401,15 @@ class TaskRelationBlueprintViewSet(LOFARViewSet): serializer_class = serializers.TaskRelationBlueprintSerializer +class TaskSchedulingRelationBlueprintViewSet(LOFARViewSet): + queryset = models.TaskSchedulingRelationBlueprint.objects.all() + serializer_class = serializers.TaskSchedulingRelationBlueprintSerializer + +class TaskSchedulingRelationDraftViewSet(LOFARViewSet): + queryset = models.TaskSchedulingRelationDraft.objects.all() + serializer_class = serializers.TaskSchedulingRelationDraftSerializer + + class TaskRelationBlueprintNestedViewSet(LOFARNestedViewSet): queryset = models.TaskRelationBlueprint.objects.all() @@ -416,4 +425,3 @@ class TaskRelationBlueprintNestedViewSet(LOFARNestedViewSet): return task_relation_draft.related_task_relation_blueprint.all() else: return models.TaskRelationBlueprint.objects.all() - diff --git a/SAS/TMSS/src/tmss/urls.py b/SAS/TMSS/src/tmss/urls.py index 364d521a0b1..a10c90d99c0 100644 --- a/SAS/TMSS/src/tmss/urls.py +++ b/SAS/TMSS/src/tmss/urls.py @@ -97,6 +97,8 @@ router.register(r'task_draft', viewsets.TaskDraftViewSet) router.register(r'task_blueprint', viewsets.TaskBlueprintViewSet) router.register(r'task_relation_draft', viewsets.TaskRelationDraftViewSet) router.register(r'task_relation_blueprint', viewsets.TaskRelationBlueprintViewSet) +router.register(r'task_scheduling_relation_draft', viewsets.TaskSchedulingRelationDraftViewSet) +router.register(r'task_scheduling_relation_blueprint', viewsets.TaskSchedulingRelationBlueprintViewSet) # nested router.register(r'cycle/(?P<cycle_id>[\w\-]+)/project', viewsets.ProjectNestedViewSet) -- GitLab