def test_outdated_data_simple_dependency(tmp_directory): """ A -> B """ dag = DAG() fa = Path('a.txt') fb = Path('b.txt') ta = PythonCallable(touch_root, File(fa), dag, 'ta') tb = PythonCallable(touch, File(fb), dag, 'tb') ta >> tb ta.render() tb.render() assert not ta.product.exists() assert not tb.product.exists() assert ta.product._is_outdated() assert tb.product._is_outdated() dag.build() dag._clear_metadata() # they both exist now assert ta.product.exists() assert tb.product.exists() # and arent outdated... assert not ta.product._is_outdated() assert not tb.product._is_outdated() # let's make b outdated ta.build(force=True) dag._clear_metadata() assert not ta.product._is_outdated() assert tb.product._is_outdated()
def test_dag_render_step_by_step(): dag = DAG() t1 = PythonCallable(touch_root, File('t1.txt'), dag, name='t1') t21 = PythonCallable(touch, File('t21.txt'), dag, name='t21') t22 = PythonCallable(touch, File('t22.txt'), dag, name='t22') t3 = PythonCallable(touch, File('t3.txt'), dag, name='t3') t1 >> t21 t1 >> t22 (t21 + t22) >> t3 assert (set(t.exec_status for t in dag.values()) == {TaskStatus.WaitingRender}) t1.render() assert t1.exec_status == TaskStatus.WaitingExecution assert t21.exec_status == TaskStatus.WaitingRender assert t22.exec_status == TaskStatus.WaitingRender assert t3.exec_status == TaskStatus.WaitingRender t21.render() assert t1.exec_status == TaskStatus.WaitingExecution assert t21.exec_status == TaskStatus.WaitingUpstream assert t22.exec_status == TaskStatus.WaitingRender assert t3.exec_status == TaskStatus.WaitingRender t22.render() assert t1.exec_status == TaskStatus.WaitingExecution assert t21.exec_status == TaskStatus.WaitingUpstream assert t22.exec_status == TaskStatus.WaitingUpstream assert t3.exec_status == TaskStatus.WaitingRender t3.render() assert t1.exec_status == TaskStatus.WaitingExecution assert t21.exec_status == TaskStatus.WaitingUpstream assert t22.exec_status == TaskStatus.WaitingUpstream assert t3.exec_status == TaskStatus.WaitingUpstream