def test_warnings_are_shown(tmp_directory): dag = DAG() t1 = PythonCallable(touch_root, File('file.txt'), dag) t2 = PythonCallable(touch, File('file2.txt'), dag) t1.on_render = on_render_1 t2.on_render = on_render_2 t1 >> t2 with pytest.warns(None) as record: dag.render() assert len(record) == 1 assert 'This is a warning' in str(record[0].message) assert 'This is another warning' in str(record[0].message)
def test_task_status_when_on_render_crashes(method, tmp_directory): dag = DAG() t = PythonCallable(fn, File('file'), dag) t.on_render = hook_crashing t2 = PythonCallable(touch_w_upstream, File('file2'), dag) t >> t2 with pytest.raises(DAGRenderError) as excinfo: getattr(dag, method)() assert t.exec_status == TaskStatus.ErroredRender assert t2.exec_status == TaskStatus.AbortedRender assert "PythonCallable: fn -> File('file')" in str(excinfo.getrepr()) # let's also check we can recover t.on_render = hook assert getattr(dag, method)()
def test_on_render_exceptions_are_logged(executor, caplog): dag = DAG(executor=executor) t = PythonCallable(fn, File('file.txt'), dag, name='t') t.on_render = hook_crashing with caplog.at_level(logging.ERROR): with pytest.raises(DAGRenderError): dag.render() assert 'Exception when running on_render for task "t"' in caplog.text
def test_recover_from_failed_render(): dag = DAG() t1 = PythonCallable(touch_root, File('file.txt'), dag) t2 = PythonCallable(touch, File('file2.txt'), dag) t1.on_render = on_render_failed t2.on_render = on_render_2 t1 >> t2 with pytest.raises(DAGRenderError): dag.render() assert t1.exec_status == TaskStatus.ErroredRender assert t2.exec_status == TaskStatus.AbortedRender t1.on_render = on_render_1 dag.render() assert t1.exec_status == TaskStatus.WaitingExecution assert t2.exec_status == TaskStatus.WaitingUpstream
def test_runs_on_render(executor, method, tmp_directory): hook.count = 0 hook_2.count = 0 hook_3.count = 0 dag = DAG(executor=executor) t = PythonCallable(fn, File('file1.txt'), dag, 't') t.on_render = hook t2 = PythonCallable(touch_w_upstream, File('file2'), dag, 't2') t2.on_render = hook_2 t3 = PythonCallable(fn, File('file3'), dag, 't3') t3.on_render = hook_3 t >> t2 getattr(dag, method)() assert hook.count == 1 assert hook_2.count == 1 assert hook_3.count == 1