def testSerializeWorkflow(self, path_file=None, data=None): if self.serializer is None: return if path_file is None: path_file = os.path.join(data_dir, 'spiff', 'workflow1.path') path = open(path_file).read() elif os.path.exists(path_file): path = open(path_file).read() else: path = None # run a workflow fresh from the spec to completion, see if it # serialises and deserialises correctly. workflow_without_save = run_workflow(self, self.wf_spec, path, data) try: serialized1 = workflow_without_save.serialize(self.serializer) restored_wf = Workflow.deserialize(self.serializer, serialized1) serialized2 = restored_wf.serialize(self.serializer) except TaskNotSupportedError as e: return else: self.assert_(isinstance(serialized1, self.serial_type)) self.assert_(isinstance(serialized2, self.serial_type)) self.compareSerialization(serialized1, serialized2) # try an freshly started workflow, see if it serialises and # deserialiases correctly. (no longer catch for exceptions: if they # were going to happen they should have happened already.) workflow = Workflow(self.wf_spec) serialized1 = workflow.serialize(self.serializer) restored_wf = Workflow.deserialize(self.serializer, serialized1) serialized2 = restored_wf.serialize(self.serializer) self.assert_(isinstance(serialized1, self.serial_type)) self.assert_(isinstance(serialized2, self.serial_type)) self.compareSerialization(serialized1, serialized2) self.assertFalse(restored_wf.is_completed()) # Run it to completion, see if it serialises and deserialises correctly # also check if the restored and unrestored ones are the same after # being run through. workflow_unrestored = run_workflow(self, self.wf_spec, path, data, workflow=workflow) workflow_restored = run_workflow(self, self.wf_spec, path, data, workflow=restored_wf) serialized1 = workflow_restored.serialize(self.serializer) restored_wf = Workflow.deserialize(self.serializer, serialized1) serialized2 = restored_wf.serialize(self.serializer) self.assert_(isinstance(serialized1, self.serial_type)) self.assert_(isinstance(serialized2, self.serial_type)) self.compareSerialization(serialized1, serialized2) serialized_crosscheck = workflow_unrestored.serialize(self.serializer) self.assert_(isinstance(serialized_crosscheck, self.serial_type)) # compare the restored and unrestored completed ones. Because they ran # separately, exclude the last_state_change time. Because you can have # dynamically created tasks, don't compare (uu)ids. self.compareSerialization(serialized_crosscheck, serialized2, exclude_dynamic=True)
def testDeserialization(self): """ Tests the that deserialized workflow matches the original workflow """ old_workflow = self.workflow old_workflow.spec.start.set_property(marker=True) serializer = DictionarySerializer() serialized_workflow = old_workflow.serialize(serializer) serializer = DictionarySerializer() new_workflow = Workflow.deserialize(serializer, serialized_workflow) self.assertEqual(len(new_workflow.get_tasks()), len(old_workflow.get_tasks())) self.assertEqual(new_workflow.spec.start.get_property('marker'), old_workflow.spec.start.get_property('marker')) self.assertEqual( 1, len([ t for t in new_workflow.get_tasks() if t.task_spec.name == 'Start' ])) self.assertEqual( 1, len([ t for t in new_workflow.get_tasks() if t.task_spec.name == 'Root' ]))
def testDictionarySerializer(self): """ Tests the SelectivePickler serializer for persisting Workflows and Tasks. """ old_workflow = self.workflow serializer = DictionarySerializer() serialized_workflow = old_workflow.serialize(serializer) serializer = DictionarySerializer() new_workflow = Workflow.deserialize(serializer, serialized_workflow) before = old_workflow.get_dump() after = new_workflow.get_dump() self.assertEqual(before, after)
def testDictionarySerializer(self): """ Tests the SelectivePickler serializer for persisting Workflows and Tasks. """ old_workflow = self.workflow serializer = DictionarySerializer() serialized_workflow = old_workflow.serialize(serializer) serializer = DictionarySerializer() new_workflow = Workflow.deserialize(serializer, serialized_workflow) before = old_workflow.get_dump() after = new_workflow.get_dump() self.assert_(before == after, 'Before:\n' + before + '\n' \ + 'After:\n' + after + '\n')
def testDeserialization(self): """ Tests the that deserialized workflow can be completed. """ old_workflow = self.workflow old_workflow.complete_next() self.assertEquals('task_a2', old_workflow.last_task.get_name()) serializer = DictionarySerializer() serialized_workflow = old_workflow.serialize(serializer) serializer = DictionarySerializer() new_workflow = Workflow.deserialize(serializer, serialized_workflow) self.assertEquals('task_a2', old_workflow.last_task.get_name()) new_workflow.complete_all() self.assertEquals('task_a2', old_workflow.last_task.get_name())
def testDeserialization(self): """ Tests the that deserialized workflow matches the original workflow """ old_workflow = self.workflow old_workflow.spec.start.set_data(marker=True) serializer = DictionarySerializer() serialized_workflow = old_workflow.serialize(serializer) serializer = DictionarySerializer() new_workflow = Workflow.deserialize(serializer, serialized_workflow) self.assertEqual(len(new_workflow.get_tasks()), len(old_workflow.get_tasks())) self.assertEqual(new_workflow.spec.start.get_data('marker'), old_workflow.spec.start.get_data('marker')) self.assertEqual(1, len([t for t in new_workflow.get_tasks() if t.task_spec.name == 'Start'])) self.assertEqual(1, len([t for t in new_workflow.get_tasks() if t.task_spec.name == 'Root']))
def testDeserialization(self): """ Tests the that deserialized workflow can be completed. """ old_workflow = self.workflow old_workflow.complete_next() self.assertEqual('task_a2', old_workflow.last_task.get_name()) serializer = DictionarySerializer() serialized_workflow = old_workflow.serialize(serializer) serializer = DictionarySerializer() new_workflow = Workflow.deserialize(serializer, serialized_workflow) self.assertEqual('task_a2', old_workflow.last_task.get_name()) new_workflow.complete_all() self.assertEqual('task_a2', old_workflow.last_task.get_name())
from SpiffWorkflow import Workflow from SpiffWorkflow.serializer.json import JSONSerializer serializer = JSONSerializer() with open('workflow.json') as fp: workflow_json = fp.read() workflow = Workflow.deserialize(serializer, workflow_json)
def workflow_deserialize(workflow_json): serializer = TradeFlowSerializer() workflow_instance = Workflow.deserialize(serializer, workflow_json) return workflow_instance