Modifying workbook service to infer name and tags from definition

Change-Id: I09cbcdad9939d6557ca5a4467e82be84d35a08de
This commit is contained in:
Renat Akhmerov 2014-09-22 10:21:52 -07:00
parent 0b4efb58e8
commit 65d2330412
5 changed files with 34 additions and 61 deletions

View File

@ -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())

View File

@ -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', [])

View File

@ -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'
)

View File

@ -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)

View File

@ -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}
)