diff --git a/SAS/TMSS/src/query.py b/SAS/TMSS/src/query.py index d8b352d7b82648af1834f32876bc2e08e0207142..0fb99f664eea2d9c7519b324c8225c4f48725696 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 566ea86c023b193be3cdebb7dc205b0d328988c7..d4e6f9001d4aba40f6ac9e3451b9826ee9d6a9cd 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 0000000000000000000000000000000000000000..ad7a00a6dac88ae16943b39be91f3b0192ba560d --- /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 92b02f26838dea48e5152d0c43dd68ebeba4d9f5..ec0e4e4abba24e0f54ada3d802477d399bae9556 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 16f25c43c2a58715bfba2ed1fc87ac401db3a410..b14225844e9cd2ef992243f6a43dcd8dc6af43b9 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') +