apache / apache/airflow

DateTimeSensorAsync crashes Dag parsing with templated target_time + start_from_trigger=True

Open Beginner friendly
#70,284 7 comments 0 reactions 0 assignees View on GitHub
good first issue kind:bug provider:standard
Dominant language
Python
Stars
46.9k
Forks
17.8k
Avg merge
2d 9h
Merged PRs (30d)
472

Description

### Apache Airflow version

main (also reproduced against current released 3.x)

### What happened

`DateTimeSensorAsync` declares `target_time` as a `template_fields` member (rendered via Jinja against the run context at task-execution time), but its `__init__` calls `timezone.parse(self.target_time)` at Dag-parse time when `start_from_trigger=True` — before Jinja rendering has happened. If `target_time` is a template string (the normal, documented use case for this field), this raises a parser error and crashes parsing of the entire Dag
file, not just the task.

This is the same root-cause pattern fixed for `TimeSensor` in #69610 (parse-time handling of a value that can only correctly be resolved at/near task-execution time), but with a more severe symptom: instead of silent `dag_version` churn, the whole Dag fails to parse.

### Reproduction

```python
from __future__ import annotations
import pendulum
from airflow.sdk import DAG
from airflow.providers.standard.sensors.date_time import DateTimeSensorAsync

with DAG(dag_id="repro", schedule=None, start_date=pendulum.datetime(2026, 1, 1, tz="UTC")):
DateTimeSensorAsync(
task_id="t",
target_time="{{ data_interval_end.tomorrow().replace(hour=1) }}",
start_from_trigger=True,
)
```

Raises at Dag-parse time:

```
pendulum.parsing.exceptions.ParserError: Invalid date string: {{ data_interval_end.tomorrow().replace(hour=1) }}
```

There is currently no test coverage for `DateTimeSensorAsync` combining a templated `target_time` with `start_from_trigger=True`.

### What you think should happen instead

Check whether a string is passed when start_from_trigger=True. static datetime should be fine

### How to reproduce

See reproduction script above; raises immediately on Dag parse.

### Operating System

N/A (reproduced via `breeze` container, standard provider)

### Deployment

Other

### Deployment details

Found while reviewing #69610 (`TimeSensor` fix for a related parse-time issue).

### Anything else

Related: #69610, #69543

### Are you willing to submit PR?

- [x] Yes I am willing to submit a PR!

### Code of Conduct

- [X] I agree to follow this project's [Code of Conduct](https://github.com/apache/airflow/blob/main/CODE_OF_CONDUCT.md)

Contributor guide

Open the contributing guide

Research direction

Start at DateTimeSensorAsync in airflow/providers/standard/sensors/date_time.py and run the reproduction DAG with start_from_trigger=True. Add test coverage for static and templated target_time values, verifying that DAG parsing succeeds for the templated case while static datetimes continue to work.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
data-engineering
Issue type
Bug
Difficulty
2/5
Estimated time
1-3 hours
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
72/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.