示例#1
0
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)
示例#2
0
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)()
示例#3
0
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
示例#4
0
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
示例#5
0
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