From d31193dfefa239d0b5bb09a3cc4242d2012a9714 Mon Sep 17 00:00:00 2001 From: Nico Vermaas <vermaas@astron.nl> Date: Thu, 21 Jan 2021 07:46:20 +0100 Subject: [PATCH] Revert "Merge branch 'workflow_related_serializer' into 'master'" This reverts merge request !1 --- atdb/taskdatabase/models.py | 3 ++ atdb/taskdatabase/serializers.py | 41 ++++++++------------------- atdb/taskdatabase/services/signals.py | 23 +++++++++++++++ atdb/taskdatabase/views.py | 8 ++---- 4 files changed, 40 insertions(+), 35 deletions(-) diff --git a/atdb/taskdatabase/models.py b/atdb/taskdatabase/models.py index f732bc58..16cd9d74 100644 --- a/atdb/taskdatabase/models.py +++ b/atdb/taskdatabase/models.py @@ -31,6 +31,9 @@ class Task(models.Model): sas_id = models.CharField(max_length=30, blank=True, null=True) priority = models.IntegerField(default=0) purge_policy = models.CharField(max_length=5, default="no", blank=True, null=True) + desired_workflow_id = models.CharField(max_length=12, blank=True, null=True) + desired_workflow_uri = models.CharField(max_length=100, blank=True, null=True) + workflow = models.ForeignKey(Workflow, related_name='tasks', on_delete=models.SET_NULL, null=True,blank=True) inputs = models.JSONField(null=True, blank=True) outputs = models.JSONField(null=True, blank=True) diff --git a/atdb/taskdatabase/serializers.py b/atdb/taskdatabase/serializers.py index c945e7b4..74546845 100644 --- a/atdb/taskdatabase/serializers.py +++ b/atdb/taskdatabase/serializers.py @@ -2,47 +2,19 @@ from rest_framework import serializers from .models import Status, Task, Workflow, LogEntry - -class WorkflowSerializer(serializers.ModelSerializer): - -# tasks = serializers.StringRelatedField( -# many=True, -# required=False, -# ) - - class Meta: - model = Workflow - fields = "__all__" - - class TaskSerializer(serializers.ModelSerializer): - status_history = serializers.StringRelatedField( - many=True, - required=False, - ) - class Meta: - model = Task - fields = ('id','task_type','taskID', - 'desired_predecessor_id','predecessor','successor', - 'project','sas_id','priority','purge_policy','skip', - 'workflow', - 'status','desired_status', - 'inputs','outputs','status_history') - -class TaskReadSerializer(serializers.ModelSerializer): status_history = serializers.StringRelatedField( many=True, required=False, ) - workflow = WorkflowSerializer(read_only=True) class Meta: model = Task fields = ('id','task_type','taskID', 'desired_predecessor_id','predecessor','successor', 'project','sas_id','priority','purge_policy','skip', - 'workflow', + 'desired_workflow_id','desired_workflow_uri','workflow', 'status','desired_status', 'inputs','outputs','status_history') @@ -54,6 +26,17 @@ class StatusSerializer(serializers.ModelSerializer): fields = "__all__" +class WorkflowSerializer(serializers.ModelSerializer): + +# tasks = serializers.StringRelatedField( +# many=True, +# required=False, +# ) + + class Meta: + model = Workflow + fields = "__all__" + class LogEntrySerializer(serializers.ModelSerializer): diff --git a/atdb/taskdatabase/services/signals.py b/atdb/taskdatabase/services/signals.py index deda8633..03ce4475 100644 --- a/atdb/taskdatabase/services/signals.py +++ b/atdb/taskdatabase/services/signals.py @@ -34,6 +34,28 @@ def pre_save_task_handler(sender, **kwargs): handle_pre_save(sender, **kwargs) +def add_workflow(myTaskObject): + desired_workflow_id = myTaskObject.desired_workflow_id + desired_workflow_uri = myTaskObject.desired_workflow_uri + + # first try to find the workflow by desired workflow_id + try: + desired_workflow = Workflow.objects.get(id=desired_workflow_id) + except: + desired_workflow = None + + if (desired_workflow == None): + # then try workflow_uri + desired_workflow = Workflow.objects.get(workflow_uri=desired_workflow_uri) + + # first check if works needs to be done at all + if (myTaskObject.workflow != desired_workflow): + # set the new status + myTaskObject.workflow = desired_workflow + + return myTaskObject + + def add_predecessor(myTaskObject): # connect the task to a workflow after posting a (flat) task through the REST API @@ -79,6 +101,7 @@ def handle_pre_save(sender, **kwargs): myStatus.save() # connect the task to a workflow after posting a (flat) task through the REST API + myTaskObject = add_workflow(myTaskObject) myTaskObject = add_predecessor(myTaskObject) diff --git a/atdb/taskdatabase/views.py b/atdb/taskdatabase/views.py index 4ad5ff4c..9d629398 100644 --- a/atdb/taskdatabase/views.py +++ b/atdb/taskdatabase/views.py @@ -14,7 +14,7 @@ from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger from .models import Task, Status, Workflow, LogEntry from django.db.models import Q -from .serializers import TaskSerializer, TaskReadSerializer, WorkflowSerializer, LogEntrySerializer +from .serializers import TaskSerializer, WorkflowSerializer, LogEntrySerializer from .forms import FilterForm from .services import algorithms @@ -133,11 +133,7 @@ class TaskListViewAPI(generics.ListCreateAPIView): model = Task queryset = Task.objects.all() serializer_class = TaskSerializer - def get_serializer_class(self): - if self.request.method in ['GET']: - return TaskReadSerializer - else: - return TaskSerializer + # using the Django Filter Backend - https://django-filter.readthedocs.io/en/latest/index.html filter_backends = (filters.DjangoFilterBackend,) filter_class = TaskFilter -- GitLab