def test_get_runnable_steps_many_upstream_dependencies(pipeline_steps): upstream_dep = PipelineStep(uid='upstream_dep', url='http://null', params={}, requires=[]) upstream_dep.state = 'completed' pipeline_steps[1].requires.append(upstream_dep.uid) pipeline_steps.append(upstream_dep) runnables = get_runnable_steps(pipeline_steps) assert [r.uid for r in runnables] == ['signoff1'] pipeline_steps[0].state = 'completed' runnables = get_runnable_steps(pipeline_steps) assert [r.uid for r in runnables] == ['signoff2']
def ticktock(): try: print('In ticktock') running_pipelines = [(uid, status, steps) for (uid, (status, steps)) in PIPELINES.items() if status == 'running'] print('running_pipelines', running_pipelines) for uid, status, steps in running_pipelines: refreshed_steps = refresh_pipeline_steps(steps) print('refreshed_steps', refreshed_steps) runnables = get_runnable_steps(refreshed_steps) running = get_running_steps(refreshed_steps) if len(runnables) == 0 and len(running) == 0: update_pipeline_state(uid, state='finished') # May be not a success print('Pipeline "{}" finished'.format(uid)) elif runnables: start_steps(runnables) print('Started', runnables) else: print('Nothing starts but things are running') except Exception as e: import traceback print('OH NOES!', e) traceback.print_exc()
def test_get_runnable_steps_many_many_downstream_deps_run(pipeline_steps): downstream_dep = PipelineStep(uid='another_downstream_dep', url='http://null', params={}, requires=[]) pipeline_steps.append(downstream_dep) pipeline_steps[0].state = 'completed' runnables = get_runnable_steps(pipeline_steps) assert [r.uid for r in runnables] == ['signoff2', 'another_downstream_dep']
def ticktock(): try: print("In ticktock") running_pipelines = [ (uid, status, steps) for (uid, (status, steps)) in PIPELINES.items() if status == "running" ] print("running_pipelines", running_pipelines) for uid, status, steps in running_pipelines: refreshed_steps = refresh_pipeline_steps(steps) print("refreshed_steps", refreshed_steps) runnables = get_runnable_steps(refreshed_steps) running = get_running_steps(refreshed_steps) if len(runnables) == 0 and len(running) == 0: update_pipeline_state(uid, state="finished") # May be not a success print('Pipeline "{}" finished'.format(uid)) elif runnables: start_steps(runnables) print("Started", runnables) else: print("Nothing starts but things are running") except Exception as e: import traceback print("OH NOES!", e) traceback.print_exc()
def test_get_runnable_steps_many_can_run_at_the_beginning(pipeline_steps): another_first_step = PipelineStep(uid='parallel_action_to_signoff1', url='http://null', params={}, requires=[]) pipeline_steps.append(another_first_step) runnables = get_runnable_steps(pipeline_steps) assert [r.uid for r in runnables] == ['signoff1', 'parallel_action_to_signoff1']
def test_get_runnable_steps_state_changed2(pipeline_steps): pipeline_steps[0].state = 'completed' pipeline_steps[1].state = 'completed' runnables = get_runnable_steps(pipeline_steps) assert len(runnables) == 1 assert runnables[0].uid == 'publish1'
def test_get_runnable_steps_dependency_in_failure(pipeline_steps): pipeline_steps[0].state = 'exception' runnables = get_runnable_steps(pipeline_steps) assert len(runnables) == 0
def test_get_runnable_steps_state_changed(pipeline_steps): pipeline_steps[0].state = 'completed' runnables = get_runnable_steps(pipeline_steps) assert len(runnables) == 1 assert runnables[0].uid == 'signoff2'
def test_get_runnable_steps_when_nothing_has_started(pipeline_steps): runnables = get_runnable_steps(pipeline_steps) assert len(runnables) == 1 assert runnables[0].uid == 'signoff1'