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