taskapp/utilities/task.py
changeset 236 39f83b4cf557
parent 235 e338eaeccad7
equal deleted inserted replaced
235:e338eaeccad7 236:39f83b4cf557
     1 from django.http import Http404
       
     2 from pytask.taskapp.models import Task, Map
       
     3 
       
     4 def getTask(tid):
       
     5     """ retreive the task from database.
       
     6     if the task has deps or subs, update its status correspondingly.
       
     7     """
       
     8 
       
     9     try:
       
    10         task = Task.objects.get(id=tid)
       
    11     except Task.DoesNotExist:
       
    12         raise Http404
       
    13     try:
       
    14         mapobj = Map.objects.get(main=task)
       
    15     except Map.DoesNotExist:
       
    16         mapobj = Map()
       
    17         mapobj.main = task
       
    18         mapobj.save()
       
    19         
       
    20     task_subs = mapobj.subs.all()
       
    21 
       
    22     if task.sub_type == "D":
       
    23         task.deps, task.subs = task_subs, []
       
    24     elif task.sub_type == "S":
       
    25         task.subs, task.deps = task_subs, []
       
    26 
       
    27     deps, subs = task.deps, task.subs
       
    28     if deps and task.status in ["OP", "LO"]:
       
    29         task.status = "OP" if all(map(lambda t:t.status=="CM",deps)) else "LO"
       
    30 
       
    31     ## a task with subs will remain in "LO" and will be made "OP" only if all subs are removed.
       
    32     if subs and task.status in ["OP", "LO"]:
       
    33         task.status = "LO"
       
    34 
       
    35     task.save()
       
    36     return task
       
    37