def _deserialize_task(self, workflow, s_state): assert isinstance(workflow, Workflow) # task_spec task_spec = workflow.get_task_spec_from_name(s_state['task_spec']) if task_spec.name == "Root": # Don't create two roots task = workflow.task_tree else: task = Task(workflow, task_spec) # id task.id = s_state['id'] # parent task.parent = workflow.get_task(s_state['parent']) # We need to add children in before deserializing child tasks so they can # find their parent (Task.Iter uses children to traverse the hierarchy if task.parent and task not in task.parent.children: task.parent.children.append(task) assert task.parent is not None or task.get_name() == 'Root' # children for c in s_state['children']: self._deserialize_task(workflow, c) # state task._state = s_state['state'] # last_state_change task.last_state_change = s_state['last_state_change'] # attributes task.attributes = s_state['attributes'] # internal_attributes task.internal_attributes = s_state['internal_attributes'] return task