From f4dbf49e4d2a28856255af4c00c5e0bd393d2be0 Mon Sep 17 00:00:00 2001 From: goei <goei@astron.nl> Date: Mon, 18 May 2020 16:53:43 +0200 Subject: [PATCH] TMSS-171 Create API for specifying an observation --- SAS/TMSS/src/query.py | 17 +++++++++++++- SAS/TMSS/src/tmss/tmssapp/CMakeLists.txt | 1 + SAS/TMSS/src/tmss/tmssapp/tasks.py | 20 +++++++++++++++++ SAS/TMSS/src/tmss/tmssapp/views.py | 9 ++++++++ .../tmss/tmssapp/viewsets/specification.py | 22 +++++++++++++++++-- 5 files changed, 66 insertions(+), 3 deletions(-) create mode 100644 SAS/TMSS/src/tmss/tmssapp/tasks.py diff --git a/SAS/TMSS/src/query.py b/SAS/TMSS/src/query.py index d8b352d7b82..0fb99f664ee 100644 --- a/SAS/TMSS/src/query.py +++ b/SAS/TMSS/src/query.py @@ -31,4 +31,19 @@ def main_set_subtask_state(): parser.add_argument("subtask_id", help="The ID of the TMSS subtask to set the status on") parser.add_argument("state", help="The state to set") args = parser.parse_args() - set_subtask_state(args.subtask_id, args.state) \ No newline at end of file + set_subtask_state(args.subtask_id, args.state) + + +def _specify_observation_task(task_id: int): + with TMSSsession(TMSS_USER, TMSS_PASS, TMSS_HOST, TMSS_AUTHENTICATION_METHOD) as session: + return session.get(url=TMSS_HOST+'/api/task/%s/specify_observation' % task_id) + + +def main_specify_observation_task(): + """ + Ask user for parameter 'taskid' and execute API-call to specify observation + """ + parser = argparse.ArgumentParser() + parser.add_argument("task_id", help="The ID of the TMSS task to specify for observation") + args = parser.parse_args() + _specify_observation_task(args.task_id) diff --git a/SAS/TMSS/src/tmss/tmssapp/CMakeLists.txt b/SAS/TMSS/src/tmss/tmssapp/CMakeLists.txt index 566ea86c023..d4e6f9001d4 100644 --- a/SAS/TMSS/src/tmss/tmssapp/CMakeLists.txt +++ b/SAS/TMSS/src/tmss/tmssapp/CMakeLists.txt @@ -9,6 +9,7 @@ set(_py_files populate.py validation.py subtasks.py + tasks.py ) python_install(${_py_files} diff --git a/SAS/TMSS/src/tmss/tmssapp/tasks.py b/SAS/TMSS/src/tmss/tmssapp/tasks.py new file mode 100644 index 00000000000..ad7a00a6dac --- /dev/null +++ b/SAS/TMSS/src/tmss/tmssapp/tasks.py @@ -0,0 +1,20 @@ +from lofar.sas.tmss.tmss.tmssapp import models +from lofar.common.datetimeutils import formatDatetime +from lofar.sas.tmss.tmss.exceptions import * +from lofar.sas.tmss.tmss.tmssapp.models.specification import TaskDraft, TaskBlueprint, TaskRelationBlueprint, \ + TaskRelationDraft +from lofar.sas.tmss.tmss.tmssapp.models.scheduling import Subtask, SubtaskType + + + +def instantiate_subtasks_from_taskdraft(task: models.TaskDraft): + """ + Create a task_blueprint from the task_draft + and for every subtask in task: + - create subtask and set to DEFINING + - create subtask input and outputs and link + - link subtask inputs to predecessor outputs + - set subtask to DEFINED + :raises Exception if instantiate fails. + """ + print("Doe iets...") \ No newline at end of file diff --git a/SAS/TMSS/src/tmss/tmssapp/views.py b/SAS/TMSS/src/tmss/tmssapp/views.py index 92b02f26838..ec0e4e4abba 100644 --- a/SAS/TMSS/src/tmss/tmssapp/views.py +++ b/SAS/TMSS/src/tmss/tmssapp/views.py @@ -4,19 +4,28 @@ from django.shortcuts import get_object_or_404 from lofar.sas.tmss.tmss.tmssapp import models from lofar.common.json_utils import get_default_json_object_for_schema from lofar.sas.tmss.tmss.tmssapp.adapters.parset import convert_to_parset +from lofar.sas.tmss.tmss.tmssapp.tasks import instantiate_subtasks_from_taskdraft + def subtask_template_default_specification(request, subtask_template_pk:int): subtask_template = get_object_or_404(models.SubtaskTemplate, pk=subtask_template_pk) spec = get_default_json_object_for_schema(subtask_template.schema) return JsonResponse(spec) + def task_template_default_specification(request, task_template_pk:int): task_template = get_object_or_404(models.TaskTemplate, pk=task_template_pk) spec = get_default_json_object_for_schema(task_template.schema) return JsonResponse(spec) + def subtask_parset(request, subtask_pk:int): subtask = get_object_or_404(models.Subtask, pk=subtask_pk) parset = convert_to_parset(subtask) return HttpResponse(str(parset), content_type='text/plain') + +def task_specify_observation(request, pk=None): + task = get_object_or_404(models.TaskDraft, pk=pk) + instantiate_subtasks_from_taskdraft(task) + return HttpResponse("response", content_type='text/plain') \ No newline at end of file diff --git a/SAS/TMSS/src/tmss/tmssapp/viewsets/specification.py b/SAS/TMSS/src/tmss/tmssapp/viewsets/specification.py index 16f25c43c2a..b14225844e9 100644 --- a/SAS/TMSS/src/tmss/tmssapp/viewsets/specification.py +++ b/SAS/TMSS/src/tmss/tmssapp/viewsets/specification.py @@ -3,7 +3,7 @@ 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.http import HttpResponse, JsonResponse from django.contrib.auth.models import User from rest_framework.viewsets import ReadOnlyModelViewSet @@ -17,7 +17,10 @@ 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 datetime import datetime from lofar.common.json_utils import get_default_json_object_for_schema +from lofar.common.datetimeutils import formatDatetime +from lofar.sas.tmss.tmss.tmssapp.tasks import instantiate_subtasks_from_taskdraft # This is required for keeping a user reference as ForeignKey in other models @@ -229,6 +232,8 @@ class TaskBlueprintViewSetJSONeditorOnline(LOFARViewSet): name += ' ' + self.suffix return name + + class TaskDraftViewSetJSONeditorOnline(LOFARViewSet): queryset = models.TaskDraft.objects.all() serializer_class = serializers.TaskDraftSerializerJSONeditorOnline @@ -244,4 +249,17 @@ class TaskDraftViewSetJSONeditorOnline(LOFARViewSet): scheduling_unit_draft = get_object_or_404(models.SchedulingUnitDraft, pk=self.kwargs['scheduling_unit_draft_pk']) return scheduling_unit_draft.task_drafts.all() else: - return models.TaskDraft.objects.all() \ No newline at end of file + return models.TaskDraft.objects.all() + + @action(methods=['get'], detail=True) + def specify_observation(self, request, pk=None): + task = get_object_or_404(models.TaskDraft, pk=pk) + instantiate_subtasks_from_taskdraft(task) + + results_str = "# SUBTASKS GENERATED BY TMSS FROM THE SPECIFICATION OF TASK DRAFT ID=%d ON %s url: %s\n" % ( + task.pk, + formatDatetime(datetime.utcnow()), + request._request.get_raw_uri(), + ) + return HttpResponse(results_str, content_type='text/plain') + -- GitLab