Change task() function to return 'null' if task doesn't exist
* Before this change function task(task_name) available in Mistral expressions would fail with an error if such task doesn't exist. It makes impossible to have expressions like <% task(t1) != null %> which is very convenient in cases when we need to gather meta info about how a workflow was running and what tasks have already started and what have not. So now it simply returns 'null'. Change-Id: Ifd1ea9b5ee946c7072044d1402296710676845db Closes-Bug: #1631035
This commit is contained in:
parent
84a68a6210
commit
422def65a8
@ -108,6 +108,46 @@ class YAQLFunctionsEngineTest(engine_test_base.EngineTestCase):
|
|||||||
task2.published
|
task2.published
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def test_task_function_returns_null(self):
|
||||||
|
wf_text = """---
|
||||||
|
version: '2.0'
|
||||||
|
|
||||||
|
wf:
|
||||||
|
output:
|
||||||
|
task2: <% task(task2) %>
|
||||||
|
task2bool: <% task(task2) = null %>
|
||||||
|
|
||||||
|
tasks:
|
||||||
|
task1:
|
||||||
|
action: std.noop
|
||||||
|
on-success:
|
||||||
|
- task2: <% false %>
|
||||||
|
|
||||||
|
task2:
|
||||||
|
action: std.noop
|
||||||
|
"""
|
||||||
|
|
||||||
|
wf_service.create_workflows(wf_text)
|
||||||
|
|
||||||
|
wf_ex = self.engine.start_workflow('wf', {})
|
||||||
|
|
||||||
|
self.await_workflow_success(wf_ex.id)
|
||||||
|
|
||||||
|
with db_api.transaction():
|
||||||
|
wf_ex = db_api.get_workflow_execution(wf_ex.id)
|
||||||
|
|
||||||
|
self.assertDictEqual(
|
||||||
|
{
|
||||||
|
'task2': None,
|
||||||
|
'task2bool': True
|
||||||
|
},
|
||||||
|
wf_ex.output
|
||||||
|
)
|
||||||
|
|
||||||
|
task_execs = wf_ex.task_executions
|
||||||
|
|
||||||
|
self.assertEqual(1, len(task_execs))
|
||||||
|
|
||||||
def test_task_function_non_existing(self):
|
def test_task_function_non_existing(self):
|
||||||
wf_text = """---
|
wf_text = """---
|
||||||
version: '2.0'
|
version: '2.0'
|
||||||
|
@ -138,9 +138,7 @@ def task_(context, task_name):
|
|||||||
task_ex = task_execs[-1] if len(task_execs) > 0 else None
|
task_ex = task_execs[-1] if len(task_execs) > 0 else None
|
||||||
|
|
||||||
if not task_ex:
|
if not task_ex:
|
||||||
raise ValueError(
|
return None
|
||||||
'Failed to find task execution with name: %s' % task_name
|
|
||||||
)
|
|
||||||
|
|
||||||
# We don't use to_dict() db model method because not all fields
|
# We don't use to_dict() db model method because not all fields
|
||||||
# make sense for user.
|
# make sense for user.
|
||||||
|
Loading…
Reference in New Issue
Block a user