(self, task, skip_children=False)
| 669 | return workflow |
| 670 | |
| 671 | def serialize_task(self, task, skip_children=False): |
| 672 | assert isinstance(task, Task) |
| 673 | |
| 674 | if isinstance(task.task_spec, SubWorkflow): |
| 675 | raise TaskNotSupportedError( |
| 676 | "Subworkflow tasks cannot be serialized (due to their use of" + |
| 677 | " internal_data to store the subworkflow).") |
| 678 | |
| 679 | # We are not serializing task.workflow; the deserializer accepts |
| 680 | # an already-deserialized Workflow instead. |
| 681 | elem = etree.Element('task') |
| 682 | if task.id is not None: |
| 683 | SubElement(elem, 'id').text = str(task.id) |
| 684 | if task.parent is not None: |
| 685 | SubElement(elem, 'parent').text = str(task.parent.id) |
| 686 | |
| 687 | if not skip_children: |
| 688 | children_elem = SubElement(elem, 'children') |
| 689 | for child in task.children: |
| 690 | child_elem = self.serialize_task(child) |
| 691 | children_elem.append(child_elem) |
| 692 | |
| 693 | SubElement(elem, 'state').text = TaskState.get_name(task._state) |
| 694 | if task.triggered: |
| 695 | SubElement(elem, 'triggered') |
| 696 | SubElement(elem, 'spec').text = task.task_spec.name |
| 697 | SubElement(elem, 'last-state-change').text = str( |
| 698 | task.last_state_change) |
| 699 | self.serialize_value_map(SubElement(elem, 'data'), task.data) |
| 700 | internal_data_elem = SubElement(elem, 'internal-data') |
| 701 | self.serialize_value_map(internal_data_elem, task.internal_data) |
| 702 | |
| 703 | return elem |
| 704 | |
| 705 | def deserialize_task(self, workflow, elem): |
| 706 | assert isinstance(workflow, Workflow) |
no test coverage detected