@@ -4283,3 +4283,65 @@ def test_partial_kwargs_end_to_end_deserialization(self):
42834283 assert "owner" in deserialized_task .partial_kwargs
42844284 assert deserialized_task .partial_kwargs ["retry_delay" ] == timedelta (seconds = 600 )
42854285 assert deserialized_task .partial_kwargs ["owner" ] == "custom_owner"
4286+
4287+
4288+ @pytest .mark .parametrize (
4289+ ["callbacks" , "expected_has_flags" , "absent_keys" ],
4290+ [
4291+ pytest .param (
4292+ {
4293+ "on_failure_callback" : lambda ctx : None ,
4294+ "on_success_callback" : lambda ctx : None ,
4295+ "on_retry_callback" : lambda ctx : None ,
4296+ },
4297+ ["has_on_failure_callback" , "has_on_success_callback" , "has_on_retry_callback" ],
4298+ ["on_failure_callback" , "on_success_callback" , "on_retry_callback" ],
4299+ id = "multiple_callbacks" ,
4300+ ),
4301+ pytest .param (
4302+ {"on_failure_callback" : lambda ctx : None },
4303+ ["has_on_failure_callback" ],
4304+ ["on_failure_callback" , "has_on_success_callback" , "on_success_callback" ],
4305+ id = "single_callback" ,
4306+ ),
4307+ pytest .param (
4308+ {"on_failure_callback" : lambda ctx : None , "on_execute_callback" : None },
4309+ ["has_on_failure_callback" ],
4310+ ["on_failure_callback" , "has_on_execute_callback" , "on_execute_callback" ],
4311+ id = "callback_with_none" ,
4312+ ),
4313+ pytest .param (
4314+ {},
4315+ [],
4316+ [
4317+ "has_on_execute_callback" ,
4318+ "has_on_failure_callback" ,
4319+ "has_on_success_callback" ,
4320+ "has_on_retry_callback" ,
4321+ "has_on_skipped_callback" ,
4322+ ],
4323+ id = "no_callbacks" ,
4324+ ),
4325+ ],
4326+ )
4327+ def test_dag_default_args_callbacks_serialization (callbacks , expected_has_flags , absent_keys ):
4328+ """Test callbacks in DAG default_args are serialized as boolean flags."""
4329+ default_args = {"owner" : "test_owner" , "retries" : 2 , ** callbacks }
4330+
4331+ with DAG (dag_id = "test_default_args_callbacks" , default_args = default_args ) as dag :
4332+ BashOperator (task_id = "task1" , bash_command = "echo 1" , dag = dag )
4333+
4334+ serialized_dag_dict = SerializedDAG .serialize_dag (dag )
4335+ default_args_dict = serialized_dag_dict ["default_args" ][Encoding .VAR ]
4336+
4337+ for flag in expected_has_flags :
4338+ assert default_args_dict .get (flag ) is True
4339+
4340+ for key in absent_keys :
4341+ assert key not in default_args_dict
4342+
4343+ assert default_args_dict ["owner" ] == "test_owner"
4344+ assert default_args_dict ["retries" ] == 2
4345+
4346+ deserialized_dag = SerializedDAG .deserialize_dag (serialized_dag_dict )
4347+ assert deserialized_dag .dag_id == "test_default_args_callbacks"
0 commit comments