This is an automated email from the ASF dual-hosted git repository.

henry3260 pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airflow.git


The following commit(s) were added to refs/heads/main by this push:
     new 6bef2b417f0 Validate TriggerDagRunOperator logical_date after template 
rendering (#70490)
6bef2b417f0 is described below

commit 6bef2b417f0332824d53c9c9d25cef146db01048
Author: Dr Alex Mitre <[email protected]>
AuthorDate: Mon Jul 27 05:27:07 2026 -0600

    Validate TriggerDagRunOperator logical_date after template rendering 
(#70490)
    
    logical_date is a template field, but its type validation ran in __init__,
    before Jinja rendering. Validate in execute() instead so the rendered value
    is what gets checked.
    
    Co-authored-by: Dr Alex Mitre <[email protected]>
    Co-authored-by: Henry Chen <[email protected]>
---
 .../src/airflow/providers/standard/operators/trigger_dagrun.py   | 2 +-
 .../tests/unit/standard/operators/test_trigger_dagrun.py         | 9 +++++++++
 scripts/ci/prek/validate_operators_init_exemptions.txt           | 1 -
 3 files changed, 10 insertions(+), 2 deletions(-)

diff --git 
a/providers/standard/src/airflow/providers/standard/operators/trigger_dagrun.py 
b/providers/standard/src/airflow/providers/standard/operators/trigger_dagrun.py
index 60d96cbe3f4..958cc258cf3 100644
--- 
a/providers/standard/src/airflow/providers/standard/operators/trigger_dagrun.py
+++ 
b/providers/standard/src/airflow/providers/standard/operators/trigger_dagrun.py
@@ -221,7 +221,6 @@ class TriggerDagRunOperator(BaseOperator):
         self.openlineage_inject_parent_info = openlineage_inject_parent_info
         self.note = note
         self.deferrable = deferrable
-        logical_date = _validate_datetime_param("logical_date", logical_date)
         run_after = _validate_datetime_param("run_after", run_after)
         self.logical_date = logical_date
         self.run_after = run_after
@@ -232,6 +231,7 @@ class TriggerDagRunOperator(BaseOperator):
             )
 
     def execute(self, context: Context):
+        _validate_datetime_param("logical_date", self.logical_date)
         if self.logical_date is NOTSET:
             if self.run_after is not NOTSET:
                 parsed_logical_date = None
diff --git 
a/providers/standard/tests/unit/standard/operators/test_trigger_dagrun.py 
b/providers/standard/tests/unit/standard/operators/test_trigger_dagrun.py
index 2bce35574dc..21bd4d8e380 100644
--- a/providers/standard/tests/unit/standard/operators/test_trigger_dagrun.py
+++ b/providers/standard/tests/unit/standard/operators/test_trigger_dagrun.py
@@ -259,6 +259,15 @@ class TestDagRunOperator:
 
         assert exc_info.value.logical_date == timezone.datetime(2021, 1, 2, 3, 
4, 5)
 
+    def 
test_trigger_dagrun_with_invalid_logical_date_type_fails_at_execute_time(self):
+        task = TriggerDagRunOperator(
+            task_id="test_trigger_dagrun_with_invalid_logical_date_type",
+            trigger_dag_id=TRIGGERED_DAG_ID,
+            logical_date=12345,
+        )
+        with pytest.raises(TypeError, match="Expected str, datetime.datetime, 
or None"):
+            task.execute(context={})
+
     def test_trigger_dagrun_operator_templated_invalid_conf(self, dag_maker):
         """Test passing a conf that is not JSON Serializable raise error."""
         with dag_maker(
diff --git a/scripts/ci/prek/validate_operators_init_exemptions.txt 
b/scripts/ci/prek/validate_operators_init_exemptions.txt
index 47ca0504b84..acac4f42878 100644
--- a/scripts/ci/prek/validate_operators_init_exemptions.txt
+++ b/scripts/ci/prek/validate_operators_init_exemptions.txt
@@ -40,4 +40,3 @@ 
providers/microsoft/azure/src/airflow/providers/microsoft/azure/transfers/oracle
 
providers/microsoft/psrp/src/airflow/providers/microsoft/psrp/operators/psrp.py::PsrpOperator
 
providers/oracle/src/airflow/providers/oracle/transfers/oracle_to_oracle.py::OracleToOracleOperator
 
providers/standard/src/airflow/providers/standard/operators/bash.py::BashOperator
-providers/standard/src/airflow/providers/standard/operators/trigger_dagrun.py::TriggerDagRunOperator

Reply via email to