Skip to content
Snippets Groups Projects
Commit 81a63d18 authored by Nico Vermaas's avatar Nico Vermaas
Browse files

Merge branch 'SDC-937-many-to-one-join' into 'master'

SDC-937 many-to-one join-output-tasks

See merge request !311
parents 3d1eb7b2 3afd094c
No related branches found
No related tags found
1 merge request!311SDC-937 many-to-one join-output-tasks
Pipeline #53096 passed
atdb/docs/ATDB-LDV Data Model.png

126 KiB | W: | H:

atdb/docs/ATDB-LDV Data Model.png

134 KiB | W: | H:

atdb/docs/ATDB-LDV Data Model.png
atdb/docs/ATDB-LDV Data Model.png
atdb/docs/ATDB-LDV Data Model.png
atdb/docs/ATDB-LDV Data Model.png
  • 2-up
  • Swipe
  • Onion skin
......@@ -292,6 +292,24 @@ class Task(models.Model):
return False
return True
@property
def joined_status(self):
# if a task has joined_input_tasks, then check their status
try:
joined_input_tasks = self.joined_input_tasks.all()
status = None
for task in joined_input_tasks:
if status and task.status != status:
return None
status = task.status
# all statusses are the same, return it
return status
except Exception as e:
print(e)
return "unknown"
# NV: this shows the latest status change, but because it is a derived property it cannot be sorted.
# This functionality was not requested, and to avoid additional requests about 'sort' functionalty
# it is currently commented out. Could be of use later though, so I leave it in for now.
......
......@@ -91,7 +91,8 @@ class TaskReadSerializer(serializers.ModelSerializer):
class Meta:
model = Task
fields = ['id','task_type','creationTime','filter',
'predecessor','predecessor_status','successors', 'joined_input_tasks','joined_output_task',
'predecessor','predecessor_status','successors',
'joined_input_tasks','joined_output_task','joined_status',
'project','sas_id','priority','purge_policy','cleanup_policy','resume',
'workflow',
'stage_request_id',
......@@ -123,7 +124,7 @@ class TaskReadSerializerFast(serializers.ModelSerializer):
class Meta:
model = Task
fields = ['id','task_type','creationTime','filter','predecessor','predecessor_status',
'joined_input_tasks', 'joined_output_task',
'joined_input_tasks', 'joined_output_task', 'joined_status'
'project','sas_id','priority','purge_policy','cleanup_policy','resume',
'workflow',
'stage_request_id',
......
from django.test import TestCase
import json
from taskdatabase.models import Workflow,Task
class TestJoinedTasks(TestCase):
@classmethod
def setUpTestData(cls):
# Set up non-modified objects used by all test methods
workflow = Workflow()
workflow.save()
# create a list of Tasks
Task.objects.get_or_create(sas_id=1, status='stored')
Task.objects.get_or_create(sas_id=2, status='stored')
Task.objects.get_or_create(sas_id=3, status='defined')
def test_add_input_tasks_to_task(self):
output_task = Task.objects.get(sas_id=1)
input_task_1 = Task.objects.get(sas_id=2)
input_task_2 = Task.objects.get(sas_id=3)
output_task.joined_input_tasks.set([input_task_1,input_task_2])
output_task.save()
# count number of input asks
count_input_tasks = output_task.joined_input_tasks.count()
self.assertEqual(count_input_tasks,2)
def test_join_status_none(self):
output_task = Task.objects.get(sas_id=1)
input_task_1 = Task.objects.get(sas_id=2) # stored
input_task_2 = Task.objects.get(sas_id=3) # defined
output_task.joined_input_tasks.set([input_task_1,input_task_2])
output_task.save()
# one input task on stored, and on on defined, should give: None
self.assertEqual(output_task.joined_status,None)
def test_join_status_stored(self):
output_task = Task.objects.get(sas_id=3)
input_task_1 = Task.objects.get(sas_id=2) # stored
input_task_2 = Task.objects.get(sas_id=1) # stored
output_task.joined_input_tasks.set([input_task_1, input_task_2])
output_task.save()
# two input tasks 'stored', should give: 'stored'
self.assertEqual(output_task.joined_status, "stored")
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment