Modifying workbook service to infer name and tags from definition
Change-Id: I09cbcdad9939d6557ca5a4467e82be84d35a08de
This commit is contained in:
parent
0b4efb58e8
commit
65d2330412
|
@ -79,7 +79,7 @@ class WorkbooksController(rest.RestController):
|
|||
"""Update the named workbook."""
|
||||
LOG.debug("Update workbook [name=%s, workbook=%s]" % (name, workbook))
|
||||
|
||||
db_model = workbooks.update_workbook_v2(name, workbook.to_dict())
|
||||
db_model = workbooks.update_workbook_v2(workbook.to_dict())
|
||||
|
||||
return Workbook.from_dict(db_model.to_dict())
|
||||
|
||||
|
|
|
@ -42,30 +42,29 @@ def update_workbook_v1(workbook_name, values):
|
|||
def create_workbook_v2(values):
|
||||
_add_security_info(values)
|
||||
_update_specification(values)
|
||||
_infer_data_from_specification(values)
|
||||
|
||||
with db_api_v2.transaction():
|
||||
wb_db = db_api_v2.create_workbook(values)
|
||||
|
||||
_check_workbook_definition_update(wb_db, values)
|
||||
_on_workbook_update(wb_db, values)
|
||||
|
||||
return wb_db
|
||||
|
||||
|
||||
def update_workbook_v2(workbook_name, values):
|
||||
def update_workbook_v2(values):
|
||||
_update_specification(values)
|
||||
_infer_data_from_specification(values)
|
||||
|
||||
with db_api_v2.transaction():
|
||||
wb_db = db_api_v2.update_workbook(workbook_name, values)
|
||||
wb_db = db_api_v2.update_workbook(values['name'], values)
|
||||
|
||||
_check_workbook_definition_update(wb_db, values)
|
||||
_on_workbook_update(wb_db, values)
|
||||
|
||||
return wb_db
|
||||
|
||||
|
||||
def _check_workbook_definition_update(wb_db, values):
|
||||
if 'spec' not in values:
|
||||
return
|
||||
|
||||
def _on_workbook_update(wb_db, values):
|
||||
wb_spec = spec_parser.get_workbook_spec(values['spec'])
|
||||
|
||||
_create_or_update_actions(wb_db, wb_spec.get_actions())
|
||||
|
@ -121,3 +120,8 @@ def _update_specification(values):
|
|||
if 'definition' in values:
|
||||
spec = spec_parser.get_workbook_spec_from_yaml(values['definition'])
|
||||
values['spec'] = spec.to_dict()
|
||||
|
||||
|
||||
def _infer_data_from_specification(values):
|
||||
values['name'] = values['spec']['name']
|
||||
values['tags'] = values['spec'].get('tags', [])
|
||||
|
|
|
@ -65,28 +65,18 @@ class DefaultEngineTest(base.DbTestCase):
|
|||
def setUp(self):
|
||||
super(DefaultEngineTest, self).setUp()
|
||||
|
||||
self.wb_name = self.getUniqueString("wb")
|
||||
|
||||
wb_service.create_workbook_v2({
|
||||
'name': self.wb_name,
|
||||
'description': 'Simple workbook for testing engine.',
|
||||
'definition': WORKBOOK,
|
||||
'tags': ['test']
|
||||
})
|
||||
wb_service.create_workbook_v2({'definition': WORKBOOK})
|
||||
|
||||
# Note: For purposes of this test we can easily use
|
||||
# simple magic mocks for engine and executor clients
|
||||
self.engine = d_eng.DefaultEngine(mock.MagicMock())
|
||||
|
||||
def test_start_workflow(self):
|
||||
wf_input = {
|
||||
'param1': 'Hey',
|
||||
'param2': 'Hi'
|
||||
}
|
||||
wf_input = {'param1': 'Hey', 'param2': 'Hi'}
|
||||
|
||||
# Start workflow.
|
||||
exec_db = self.engine.start_workflow(
|
||||
'%s.wf1' % self.wb_name,
|
||||
'wb.wf1',
|
||||
wf_input,
|
||||
task_name='task2'
|
||||
)
|
||||
|
@ -117,7 +107,7 @@ class DefaultEngineTest(base.DbTestCase):
|
|||
self.assertRaises(
|
||||
exc.WorkflowInputException,
|
||||
self.engine.start_workflow,
|
||||
'%s.wf1' % self.wb_name,
|
||||
'wb.wf1',
|
||||
None,
|
||||
task_name='task2'
|
||||
)
|
||||
|
@ -126,20 +116,17 @@ class DefaultEngineTest(base.DbTestCase):
|
|||
self.assertRaises(
|
||||
exc.WorkflowInputException,
|
||||
self.engine.start_workflow,
|
||||
'%s.wf1' % self.wb_name,
|
||||
'wb.wf1',
|
||||
{'param1': 'Hey', 'param2': 'Hi', 'unexpected_param': 'val'},
|
||||
task_name='task2'
|
||||
)
|
||||
|
||||
def test_on_task_result(self):
|
||||
wf_input = {
|
||||
'param1': 'Hey',
|
||||
'param2': 'Hi'
|
||||
}
|
||||
wf_input = {'param1': 'Hey', 'param2': 'Hi'}
|
||||
|
||||
# Start workflow.
|
||||
exec_db = self.engine.start_workflow(
|
||||
'%s.wf1' % self.wb_name,
|
||||
'wb.wf1',
|
||||
wf_input,
|
||||
task_name='task2'
|
||||
)
|
||||
|
|
|
@ -32,7 +32,7 @@ WORKBOOK = """
|
|||
---
|
||||
version: '2.0'
|
||||
|
||||
name: my_wb
|
||||
name: wb
|
||||
|
||||
workflows:
|
||||
wf1:
|
||||
|
@ -55,7 +55,7 @@ WAIT_BEFORE_WB = """
|
|||
---
|
||||
version: '2.0'
|
||||
|
||||
name: my_wb
|
||||
name: wb
|
||||
|
||||
workflows:
|
||||
wf1:
|
||||
|
@ -73,7 +73,7 @@ WAIT_AFTER_WB = """
|
|||
---
|
||||
version: '2.0'
|
||||
|
||||
name: my_wb
|
||||
name: wb
|
||||
|
||||
workflows:
|
||||
wf1:
|
||||
|
@ -91,7 +91,7 @@ RETRY_WB = """
|
|||
---
|
||||
version: '2.0'
|
||||
|
||||
name: my_wb
|
||||
name: wb
|
||||
|
||||
workflows:
|
||||
wf1:
|
||||
|
@ -108,15 +108,6 @@ workflows:
|
|||
"""
|
||||
|
||||
|
||||
def create_workbook(name, definition):
|
||||
return wb_service.create_workbook_v2({
|
||||
'name': name,
|
||||
'description': 'Simple workbook for testing policies.',
|
||||
'definition': definition,
|
||||
'tags': ['test']
|
||||
})
|
||||
|
||||
|
||||
class PoliciesTest(base.EngineTestCase):
|
||||
def setUp(self):
|
||||
super(PoliciesTest, self).setUp()
|
||||
|
@ -125,8 +116,6 @@ class PoliciesTest(base.EngineTestCase):
|
|||
|
||||
self.task_spec = wb_spec.get_workflows()['wf1'].get_tasks()['task1']
|
||||
|
||||
self.wb_name = self.getUniqueString("wb")
|
||||
|
||||
thread_group = scheduler.setup()
|
||||
self.addCleanup(thread_group.stop)
|
||||
|
||||
|
@ -150,10 +139,10 @@ class PoliciesTest(base.EngineTestCase):
|
|||
self.assertEqual('$.my_val = 10', p.break_on)
|
||||
|
||||
def test_wait_before_policy(self):
|
||||
create_workbook(self.wb_name, WAIT_BEFORE_WB)
|
||||
wb_service.create_workbook_v2({'definition': WAIT_BEFORE_WB})
|
||||
|
||||
# Start workflow.
|
||||
exec_db = self.engine.start_workflow('%s.wf1' % self.wb_name, {})
|
||||
exec_db = self.engine.start_workflow('wb.wf1', {})
|
||||
|
||||
# Note: We need to reread execution to access related tasks.
|
||||
exec_db = db_api.get_execution(exec_db.id)
|
||||
|
@ -175,10 +164,10 @@ class PoliciesTest(base.EngineTestCase):
|
|||
self.assertEqual(states.SUCCESS, exec_db.state)
|
||||
|
||||
def test_wait_after_policy(self):
|
||||
create_workbook(self.wb_name, WAIT_AFTER_WB)
|
||||
wb_service.create_workbook_v2({'definition': WAIT_AFTER_WB})
|
||||
|
||||
# Start workflow.
|
||||
exec_db = self.engine.start_workflow('%s.wf1' % self.wb_name, {})
|
||||
exec_db = self.engine.start_workflow('wb.wf1', {})
|
||||
|
||||
# Note: We need to reread execution to access related tasks.
|
||||
exec_db = db_api.get_execution(exec_db.id)
|
||||
|
@ -201,10 +190,10 @@ class PoliciesTest(base.EngineTestCase):
|
|||
self.assertEqual(states.SUCCESS, exec_db.state)
|
||||
|
||||
def test_retry_policy(self):
|
||||
create_workbook(self.wb_name, RETRY_WB)
|
||||
wb_service.create_workbook_v2({'definition': RETRY_WB})
|
||||
|
||||
# Start workflow.
|
||||
exec_db = self.engine.start_workflow('%s.wf1' % self.wb_name, {})
|
||||
exec_db = self.engine.start_workflow('wb.wf1', {})
|
||||
|
||||
# Note: We need to reread execution to access related tasks.
|
||||
exec_db = db_api.get_execution(exec_db.id)
|
||||
|
|
|
@ -32,6 +32,7 @@ WORKBOOK = """
|
|||
version: '2.0'
|
||||
|
||||
name: my_wb
|
||||
tags: [test]
|
||||
|
||||
actions:
|
||||
concat:
|
||||
|
@ -70,6 +71,7 @@ UPDATED_WORKBOOK = """
|
|||
version: '2.0'
|
||||
|
||||
name: my_wb
|
||||
tags: [test]
|
||||
|
||||
actions:
|
||||
concat:
|
||||
|
@ -106,11 +108,7 @@ workflows:
|
|||
|
||||
class WorkbookServiceTest(base.EngineTestCase):
|
||||
def test_create_workbook(self):
|
||||
wb_db = wb_service.create_workbook_v2({
|
||||
'name': 'my_wb',
|
||||
'definition': WORKBOOK,
|
||||
'tags': ['test']
|
||||
})
|
||||
wb_db = wb_service.create_workbook_v2({'definition': WORKBOOK})
|
||||
|
||||
self.assertIsNotNone(wb_db)
|
||||
self.assertEqual('my_wb', wb_db.name)
|
||||
|
@ -152,18 +150,13 @@ class WorkbookServiceTest(base.EngineTestCase):
|
|||
|
||||
def test_update_workbook(self):
|
||||
# Create workbook.
|
||||
wb_db = wb_service.create_workbook_v2({
|
||||
'name': 'my_wb',
|
||||
'definition': WORKBOOK,
|
||||
'tags': ['test']
|
||||
})
|
||||
wb_db = wb_service.create_workbook_v2({'definition': WORKBOOK})
|
||||
|
||||
self.assertIsNotNone(wb_db)
|
||||
self.assertEqual(2, len(db_api.get_workflows()))
|
||||
|
||||
# Update workbook.
|
||||
wb_db = wb_service.update_workbook_v2(
|
||||
'my_wb',
|
||||
{'definition': UPDATED_WORKBOOK}
|
||||
)
|
||||
|
||||
|
|
Loading…
Reference in New Issue