Skip to content

Commit be5df5c

Browse files
newtonleashb
authored andcommitted
[AIRFLOW-3123] Use a stack for DAG context management (apache#3956)
1 parent ce23f16 commit be5df5c

File tree

2 files changed

+9
-10
lines changed

2 files changed

+9
-10
lines changed

airflow/models.py

+4-7
Original file line numberDiff line numberDiff line change
@@ -3442,7 +3442,7 @@ def __init__(
34423442
self.on_success_callback = on_success_callback
34433443
self.on_failure_callback = on_failure_callback
34443444

3445-
self._context_manager_set = False
3445+
self._old_context_manager_dags = []
34463446

34473447
self._comps = {
34483448
'dag_id',
@@ -3492,16 +3492,13 @@ def __hash__(self):
34923492

34933493
def __enter__(self):
34943494
global _CONTEXT_MANAGER_DAG
3495-
if not self._context_manager_set:
3496-
self._old_context_manager_dag = _CONTEXT_MANAGER_DAG
3497-
_CONTEXT_MANAGER_DAG = self
3498-
self._context_manager_set = True
3495+
self._old_context_manager_dags.append(_CONTEXT_MANAGER_DAG)
3496+
_CONTEXT_MANAGER_DAG = self
34993497
return self
35003498

35013499
def __exit__(self, _type, _value, _tb):
35023500
global _CONTEXT_MANAGER_DAG
3503-
_CONTEXT_MANAGER_DAG = self._old_context_manager_dag
3504-
self._context_manager_set = False
3501+
_CONTEXT_MANAGER_DAG = self._old_context_manager_dags.pop()
35053502

35063503
# /Context Manager ----------------------------------------------
35073504

tests/models.py

+5-3
Original file line numberDiff line numberDiff line change
@@ -150,11 +150,13 @@ def test_dag_as_context_manager(self):
150150
with dag:
151151
with dag:
152152
op7 = DummyOperator(task_id='op7')
153-
op8 = DummyOperator(task_id='op8')
154-
op8.dag = dag2
153+
op8 = DummyOperator(task_id='op8')
154+
op9 = DummyOperator(task_id='op8')
155+
op9.dag = dag2
155156

156157
self.assertEqual(op7.dag, dag)
157-
self.assertEqual(op8.dag, dag2)
158+
self.assertEqual(op8.dag, dag)
159+
self.assertEqual(op9.dag, dag2)
158160

159161
def test_dag_topological_sort(self):
160162
dag = DAG(

0 commit comments

Comments
 (0)