diff --git a/atdb/taskdatabase/models.py b/atdb/taskdatabase/models.py index 16cd9d7468733d2f4e9a833ee710a507ba2e27a9..f732bc58c1ce2c5acce68ba34fe8a44c7e9bbff9 100644 --- a/atdb/taskdatabase/models.py +++ b/atdb/taskdatabase/models.py @@ -31,9 +31,6 @@ 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 7454684574ebece930d23fed74690c62e933b2ce..c945e7b454536de518f0223e09fb167dfc481d21 100644 --- a/atdb/taskdatabase/serializers.py +++ b/atdb/taskdatabase/serializers.py @@ -2,19 +2,47 @@ 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', - 'desired_workflow_id','desired_workflow_uri','workflow', + 'workflow', 'status','desired_status', 'inputs','outputs','status_history') @@ -26,17 +54,6 @@ 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 03ce4475a2d896bceb94a9f90bdc55da32365365..deda8633fd6f8bb4a5db0a6e9b04bbeef9fabcef 100644 --- a/atdb/taskdatabase/services/signals.py +++ b/atdb/taskdatabase/services/signals.py @@ -34,28 +34,6 @@ 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 @@ -101,7 +79,6 @@ 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 9d629398fb83d9ec645a474ead7ec6f69e556abd..4ad5ff4cddc1ca0c7c71658718b0b87136e8d23c 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, WorkflowSerializer, LogEntrySerializer +from .serializers import TaskSerializer, TaskReadSerializer, WorkflowSerializer, LogEntrySerializer from .forms import FilterForm from .services import algorithms @@ -133,7 +133,11 @@ 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