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