from django.http import Http404 from pytask.taskapp.models import Task, Map def getTask(tid): """ retreive the task from database. if the task has deps or subs, update its status correspondingly. """ try: task = Task.objects.get(id=tid) except Task.DoesNotExist: raise Http404 try: mapobj = Map.objects.get(main=task) except Map.DoesNotExist: mapobj = Map() mapobj.main = task mapobj.save() task_subs = mapobj.subs.all() if task.sub_type == "D": task.deps, task.subs = task_subs, [] elif task.sub_type == "S": task.subs, task.deps = task_subs, [] deps, subs = task.deps, task.subs if deps and task.status in ["OP", "LO"]: task.status = "OP" if all(map(lambda t:t.status=="CM",deps)) else "LO" if subs and task.status in ["OP", "LO", "CM"]: task.status = "CM" if all(map(lambda t:t.status=="CM",subs)) else "LO" task.save() return task