def test_invoke_as_part_of_workflow(self): resource = get_resource('workflows/three_ops.json') workflow = Workflow.load(resource) step = WorkflowStep(workflow, resource, node_id='jojo_87') workflow = Workflow( OpMetaInfo('contains_jojo_87', has_monitor=True, inputs=OrderedDict(x={}), outputs=OrderedDict(y={}))) workflow.add_step(step) step.inputs.p.source = workflow.inputs.x workflow.outputs.y.source = step.outputs.q value_cache = ValueCache() workflow.inputs.x.value = 4 workflow.invoke(context=dict(value_cache=value_cache)) output_value = workflow.outputs.y.value self.assertEqual(output_value, 2 * (4 + 1) + 3 * (2 * (4 + 1))) self.assertEqual( value_cache, { 'jojo_87._child': { 'op1': { 'y': 5 }, 'op2': { 'b': 10 }, 'op3': { 'w': 40 } } })
def test_invoke_as_part_of_workflow(self): resource = get_resource('workflows/three_ops.json') workflow = Workflow.load(resource) step = WorkflowStep(workflow, resource, node_id='jojo_87') workflow = Workflow(OpMetaInfo('contains_jojo_87', has_monitor=True, inputs=OrderedDict(x={}), outputs=OrderedDict(y={}))) workflow.add_step(step) step.inputs.p.source = workflow.inputs.x workflow.outputs.y.source = step.outputs.q value_cache = ValueCache() workflow.inputs.x.value = 4 workflow.invoke(context=dict(value_cache=value_cache)) output_value = workflow.outputs.y.value self.assertEqual(output_value, 2 * (4 + 1) + 3 * (2 * (4 + 1))) self.assertEqual(value_cache, {'jojo_87._child': {'op1': {'y': 5}, 'op2': {'b': 10}, 'op3': {'w': 40}}})
def test_invoke_with_context_inputs(self): def some_op(context, workflow, workflow_id, step, step_id, invalid): return dict(context=context, workflow=workflow, workflow_id=workflow_id, step=step, step_id=step_id, invalid=invalid) from cate.core.op import OP_REGISTRY try: op_reg = OP_REGISTRY.add_op(some_op) op_reg.op_meta_info.inputs['context']['context'] = True op_reg.op_meta_info.inputs['workflow']['context'] = 'workflow' op_reg.op_meta_info.inputs['workflow_id'][ 'context'] = 'workflow.id' op_reg.op_meta_info.inputs['step']['context'] = 'step' op_reg.op_meta_info.inputs['step_id']['context'] = 'step.id' op_reg.op_meta_info.inputs['invalid']['context'] = 'gnarz[8]' step = OpStep(op_reg, node_id='test_step') workflow = Workflow(OpMetaInfo('test_workflow')) workflow.add_step(step) workflow.invoke() output = step.outputs['return'].value self.assertIsInstance(output, dict) self.assertIsInstance(output.get('context'), dict) self.assertIs(output.get('workflow'), workflow) self.assertEqual(output.get('workflow_id'), 'test_workflow') self.assertIs(output.get('step'), step) self.assertEqual(output.get('step_id'), 'test_step') self.assertEqual(output.get('invalid', 1), None) finally: OP_REGISTRY.remove_op(some_op)
def test_invoke_with_context_inputs(self): def some_op(context, workflow, workflow_id, step, step_id, invalid): return dict(context=context, workflow=workflow, workflow_id=workflow_id, step=step, step_id=step_id, invalid=invalid) from cate.core.op import OP_REGISTRY try: op_reg = OP_REGISTRY.add_op(some_op) op_reg.op_meta_info.inputs['context']['context'] = True op_reg.op_meta_info.inputs['workflow']['context'] = 'workflow' op_reg.op_meta_info.inputs['workflow_id']['context'] = 'workflow.id' op_reg.op_meta_info.inputs['step']['context'] = 'step' op_reg.op_meta_info.inputs['step_id']['context'] = 'step.id' op_reg.op_meta_info.inputs['invalid']['context'] = 'gnarz[8]' step = OpStep(op_reg, node_id='test_step') workflow = Workflow(OpMetaInfo('test_workflow')) workflow.add_step(step) workflow.invoke() output = step.outputs['return'].value self.assertIsInstance(output, dict) self.assertIsInstance(output.get('context'), dict) self.assertIs(output.get('workflow'), workflow) self.assertEqual(output.get('workflow_id'), 'test_workflow') self.assertIs(output.get('step'), step) self.assertEqual(output.get('step_id'), 'test_step') self.assertEqual(output.get('invalid', 1), None) finally: OP_REGISTRY.remove_op(some_op)