Module Contents



Waits until the specified datetime.


Wait until the specified datetime occurs.

class airflow.sensors.date_time.DateTimeSensor(*, target_time, **kwargs)[source]

Bases: airflow.sensors.base.BaseSensorOperator

Waits until the specified datetime.

A major advantage of this sensor is idempotence for the target_time. It handles some cases for which TimeSensor and TimeDeltaSensor are not suited.

Example 1 :

If a task needs to wait for 11am on each execution_date. Using TimeSensor or TimeDeltaSensor, all backfill tasks started at 1am have to wait for 10 hours. This is unnecessary, e.g. a backfill task with {{ ds }} = '1970-01-01' does not need to wait because 1970-01-01T11:00:00 has already passed.

Example 2 :

If a DAG is scheduled to run at 23:00 daily, but one of the tasks is required to run at 01:00 next day, using TimeSensor will return True immediately because 23:00 > 01:00. Instead, we can do this:

    target_time="{{ next_execution_date.tomorrow().replace(hour=1) }}",

target_time (str | datetime.datetime) – datetime after which the job succeeds. (templated)

template_fields: Sequence[str] = ('target_time',)[source]

Override when deriving this class.

class airflow.sensors.date_time.DateTimeSensorAsync(**kwargs)[source]

Bases: DateTimeSensor

Wait until the specified datetime occurs.

Deferring itself to avoid taking up a worker slot while it is waiting. It is a drop-in replacement for DateTimeSensor.


target_time – datetime after which the job succeeds. (templated)


Derive when creating an operator.

Context is the same dictionary used as when rendering jinja templates.

Refer to get_template_context for more context.

execute_complete(context, event=None)[source]

Execute when the trigger fires - returns immediately.

Was this entry helpful?