def test_convert_task_transitions_common_publish_keys_different_values(self): converter = workflows_base.WorkflowConverter() task_spec = OrderedMap([ ('publish', OrderedMap([ ('good_data', '{{ _.good }}'), ('common_key_1', '{{ _.common_data }}'), ('common_key_2', '{{ _.different_data_1_1 }}'), ('common_key_3', '{{ _.different_data_1_2 }}'), ])), ('publish-on-error', OrderedMap([ ('bad_data', '{{ _.bad }}'), ('common_key_1', '{{ _.common_data }}'), ('common_key_2', '{{ _.different_data_2_1 }}'), ('common_key_3', '{{ _.different_data_2_2 }}'), ])), ('on-complete', [ OrderedMap([('do_thing_sometimes', '{{ _.d }}')]), 'do_thing_always' ]), ]) expr_converter = jinja.JinjaExpressionConverter() with self.assertRaises(NotImplementedError) as ctx_m: converter.convert_task_transitions("tsk_name", task_spec, expr_converter, set()) rgx = re.compile(r"Task 'tsk_name' contains one or more keys " r"\((?:common_key_2, common_key_3|common_key_3, common_key_2)\) " r"in both publish and publish-on-error dictionaries that have different " r"values\. Please either remove the common keys, or ensure that the " r"values of any common keys are the same\.") self.assertRegex(str(ctx_m.exception), rgx)
def test_convert_tasks(self): converter = workflows_base.WorkflowConverter() expr_converter = jinja.JinjaExpressionConverter() mistral_tasks = OrderedMap([ ('jinja_task', OrderedMap([ ('action', 'mypack.actionname'), ('input', OrderedMap([ ('cmd', '{{ _.test }}'), ])), ('on-success', ['next_task']), ])) ]) result = converter.convert_tasks(mistral_tasks, expr_converter, set()) self.assertEqual(result, OrderedMap([ ('jinja_task', OrderedMap([ ('action', 'mypack.actionname'), ('input', OrderedMap([ ('cmd', '{{ ctx().test }}'), ])), ('next', [ OrderedMap([ ('when', '{{ succeeded() }}'), ('do', [ 'next_task', ]) ]), ]), ])) ]))
def test_convert_task_transitions_common_publish_keys_same_values(self): converter = workflows_base.WorkflowConverter() task_spec = OrderedMap([ ('publish', OrderedMap([ ('good_data', '{{ _.good }}'), ('common_data_1', '{{ _.common_1 }}'), ('common_data_2', '{{ _.common_2 }}'), ])), ('publish-on-error', OrderedMap([ ('bad_data', '{{ _.bad }}'), ('common_data_1', '{{ _.common_1 }}'), ('common_data_2', '{{ _.common_2 }}'), ])), ('on-complete', [ 'do_thing_always' ]), ]) expr_converter = jinja.JinjaExpressionConverter() result = converter.convert_task_transitions("task_name", task_spec, expr_converter, set()) self.assertDictEqual(result, OrderedMap([ ('next', [ OrderedMap([ ('publish', [ {'good_data': '{{ ctx().good }}'}, {'common_data_1': '{{ ctx().common_1 }}'}, {'common_data_2': '{{ ctx().common_2 }}'}, {'bad_data': '{{ ctx().bad }}'}, ]), ('do', [ 'do_thing_always', ]), ]), ]), ]))
def expr_type_converter(self, expr_type): if expr_type is None: expr_converter = jinja.JinjaExpressionConverter() elif isinstance(expr_type, six.string_types): expr_type = expr_type.lower() if expr_type == 'jinja': expr_converter = jinja.JinjaExpressionConverter() elif expr_type == 'yaql': expr_converter = yql.YaqlExpressionConverter() else: raise TypeError( "Unknown expression type: {}".format(expr_type)) elif isinstance(expr_type, expr_base.BaseExpressionConverter): expr_converter = expr_type else: raise TypeError("Unknown expression class type: {}".format( type(expr_type))) return expr_converter
def test_convert_task_transition_simple_no_publish(self): converter = workflows_base.WorkflowConverter() transitions = ['a', 'b', 'c'] publish = None orquesta_expr = 'succeeded()' expr_converter = jinja.JinjaExpressionConverter() result = converter.convert_task_transition_simple(transitions, publish, orquesta_expr, expr_converter) expected = OrderedMap([ ('when', '{{ succeeded() }}'), ('do', ['a', 'b', 'c']), ]) self.assertEqual(result, expected)
def test_convert_task_transition_simple_no_transitions(self): converter = workflows_base.WorkflowConverter() transitions = None publish = OrderedMap([('key_plain', 'data'), ('key_expr', '{{ _.test }}')]) orquesta_expr = 'succeeded()' expr_converter = jinja.JinjaExpressionConverter() result = converter.convert_task_transition_simple(transitions, publish, orquesta_expr, expr_converter) expected = OrderedMap([ ('when', '{{ succeeded() }}'), ('publish', [ {'key_plain': 'data'}, {'key_expr': '{{ ctx().test }}'} ]), ]) self.assertEqual(result, expected)
def test_expr_type_converter_class_jinja(self): expr_type = jinja.JinjaExpressionConverter() converter = workflows_base.WorkflowConverter() result = converter.expr_type_converter(expr_type) self.assertIs(result, expr_type)
def test_convert_task_transitions_empty(self): converter = workflows_base.WorkflowConverter() task_spec = OrderedMap([]) expr_converter = jinja.JinjaExpressionConverter() result = converter.convert_task_transitions("task_name", task_spec, expr_converter, set()) self.assertEqual(result, OrderedMap([]))
def test_convert_task_transitions(self): converter = workflows_base.WorkflowConverter() task_spec = OrderedMap([ ('publish', OrderedMap([ ('good_data', '{{ _.good }}'), ])), ('publish-on-error', OrderedMap([ ('bad_data', '{{ _.bad }}'), ])), ('on-success', [ OrderedMap([('do_thing_a', '{{ _.x }}')]), OrderedMap([('do_thing_b', '{{ _.x }}')]) ]), ('on-error', [ OrderedMap([('do_thing_error', '{{ _.e }}')]), ]), ('on-complete', [ OrderedMap([('do_thing_sometimes', '{{ _.d }}')]), 'do_thing_always' ]), ]) expr_converter = jinja.JinjaExpressionConverter() result = converter.convert_task_transitions("task_name", task_spec, expr_converter, set()) self.assertDictEqual(result, OrderedMap([ ('next', [ OrderedMap([ ('when', '{{ succeeded() and (ctx().x) }}'), ('publish', [ {'good_data': '{{ ctx().good }}'} ]), ('do', [ 'do_thing_a', 'do_thing_b', ]), ]), OrderedMap([ ('when', '{{ failed() and (ctx().e) }}'), ('publish', [ {'bad_data': '{{ ctx().bad }}'} ]), ('do', [ 'do_thing_error', ]), ]), OrderedMap([ ('publish', [ {'good_data': '{{ ctx().good }}'}, {'bad_data': '{{ ctx().bad }}'}, ]), ('do', [ 'do_thing_always', ]), ]), OrderedMap([ ('when', '{{ ctx().d }}'), ('publish', [ {'good_data': '{{ ctx().good }}'}, {'bad_data': '{{ ctx().bad }}'}, ]), ('do', [ 'do_thing_sometimes', ]), ]), ]), ]))