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