@@ -159,6 +159,8 @@ def detect_task_dependencies(task: Operator) -> DagDependency | None: # type: i
159
159
"_task_type" : "BashOperator" ,
160
160
"_task_module" : "airflow.operators.bash" ,
161
161
"pool" : "default_pool" ,
162
+ "_is_setup" : False ,
163
+ "_is_teardown" : False ,
162
164
"executor_config" : {
163
165
"__type" : "dict" ,
164
166
"__var" : {
@@ -188,6 +190,8 @@ def detect_task_dependencies(task: Operator) -> DagDependency | None: # type: i
188
190
"_operator_name" : "@custom" ,
189
191
"_task_module" : "tests.test_utils.mock_operators" ,
190
192
"pool" : "default_pool" ,
193
+ "_is_setup" : False ,
194
+ "_is_teardown" : False ,
191
195
},
192
196
],
193
197
"schedule_interval" : {"__type" : "timedelta" , "__var" : 86400.0 },
@@ -1304,6 +1308,11 @@ def check_task_group(node):
1304
1308
def assert_taskgroup_children (se_task_group , dag_task_group , expected_children ):
1305
1309
assert se_task_group .children .keys () == dag_task_group .children .keys () == expected_children
1306
1310
1311
+ @staticmethod
1312
+ def assert_task_is_setup_teardown (task , is_setup : bool = False , is_teardown : bool = False ):
1313
+ assert task ._is_setup == is_setup
1314
+ assert task ._is_teardown == is_teardown
1315
+
1307
1316
def test_task_group_setup_teardown_tasks (self ):
1308
1317
"""
1309
1318
Test TaskGroup setup and teardown task serialization/deserialization.
@@ -1335,6 +1344,8 @@ def test_task_group_setup_teardown_tasks(self):
1335
1344
self .assert_taskgroup_children (
1336
1345
serialized_dag .task_group , dag .task_group , {"setup" , "teardown" , "group1" }
1337
1346
)
1347
+ self .assert_task_is_setup_teardown (serialized_dag .task_group .children ["setup" ], is_setup = True )
1348
+ self .assert_task_is_setup_teardown (serialized_dag .task_group .children ["teardown" ], is_teardown = True )
1338
1349
1339
1350
se_first_group = serialized_dag .task_group .children ["group1" ]
1340
1351
dag_first_group = dag .task_group .children ["group1" ]
@@ -1343,6 +1354,9 @@ def test_task_group_setup_teardown_tasks(self):
1343
1354
dag_first_group ,
1344
1355
{"group1.setup1" , "group1.task1" , "group1.group2" , "group1.teardown1" },
1345
1356
)
1357
+ self .assert_task_is_setup_teardown (se_first_group .children ["group1.setup1" ], is_setup = True )
1358
+ self .assert_task_is_setup_teardown (se_first_group .children ["group1.task1" ])
1359
+ self .assert_task_is_setup_teardown (se_first_group .children ["group1.teardown1" ], is_teardown = True )
1346
1360
1347
1361
se_second_group = se_first_group .children ["group1.group2" ]
1348
1362
dag_second_group = dag_first_group .children ["group1.group2" ]
@@ -1351,6 +1365,11 @@ def test_task_group_setup_teardown_tasks(self):
1351
1365
dag_second_group ,
1352
1366
{"group1.group2.setup2" , "group1.group2.task2" , "group1.group2.teardown2" },
1353
1367
)
1368
+ self .assert_task_is_setup_teardown (se_second_group .children ["group1.group2.setup2" ], is_setup = True )
1369
+ self .assert_task_is_setup_teardown (se_second_group .children ["group1.group2.task2" ])
1370
+ self .assert_task_is_setup_teardown (
1371
+ se_second_group .children ["group1.group2.teardown2" ], is_teardown = True
1372
+ )
1354
1373
1355
1374
def test_task_group_setup_teardown_taskgroups (self ):
1356
1375
"""
@@ -1391,22 +1410,30 @@ def teardown_group():
1391
1410
self .assert_taskgroup_children (
1392
1411
serialized_dag .task_group , dag .task_group , {"setup_group" , "sometask" , "teardown_group" }
1393
1412
)
1413
+ self .assert_task_is_setup_teardown (serialized_dag .task_group .children ["sometask" ])
1394
1414
1395
1415
se_setup_group = serialized_dag .task_group .children ["setup_group" ]
1396
1416
dag_setup_group = dag .task_group .children ["setup_group" ]
1397
1417
self .assert_taskgroup_children (
1398
1418
se_setup_group , dag_setup_group , {"setup_group.setup1" , "setup_group.sub_setup" }
1399
1419
)
1420
+ self .assert_task_is_setup_teardown (se_setup_group .children ["setup_group.setup1" ], is_setup = True )
1400
1421
1401
1422
se_sub_setup_group = se_setup_group .children ["setup_group.sub_setup" ]
1402
1423
dag_sub_setup_group = dag_setup_group .children ["setup_group.sub_setup" ]
1403
1424
self .assert_taskgroup_children (
1404
1425
se_sub_setup_group , dag_sub_setup_group , {"setup_group.sub_setup.setup2" }
1405
1426
)
1427
+ self .assert_task_is_setup_teardown (
1428
+ se_sub_setup_group .children ["setup_group.sub_setup.setup2" ], is_setup = True
1429
+ )
1406
1430
1407
1431
se_teardown_group = serialized_dag .task_group .children ["teardown_group" ]
1408
1432
dag_teardown_group = dag .task_group .children ["teardown_group" ]
1409
1433
self .assert_taskgroup_children (se_teardown_group , dag_teardown_group , {"teardown_group.teardown1" })
1434
+ self .assert_task_is_setup_teardown (
1435
+ se_teardown_group .children ["teardown_group.teardown1" ], is_teardown = True
1436
+ )
1410
1437
1411
1438
def test_deps_sorted (self ):
1412
1439
"""
0 commit comments