blob: c0c917ba99f17e39bfbb426be3fdb3924b202ea5 [file] [log] [blame]
:py:mod:`airflow.sensors.date_time`
===================================
.. py:module:: airflow.sensors.date_time
Module Contents
---------------
Classes
~~~~~~~
.. autoapisummary::
airflow.sensors.date_time.DateTimeSensor
airflow.sensors.date_time.DateTimeSensorAsync
.. py:class:: DateTimeSensor(*, target_time: Union[str, datetime.datetime], **kwargs)
Bases: :py:obj:`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:
.. code-block:: python
DateTimeSensor(
task_id="wait_for_0100",
target_time="{{ next_execution_date.tomorrow().replace(hour=1) }}",
)
:param target_time: datetime after which the job succeeds. (templated)
:type target_time: str or datetime.datetime
.. py:attribute:: template_fields
:annotation: = ['target_time']
.. py:method:: poke(self, context: Dict) -> bool
Function that the sensors defined while deriving this class should
override.
.. py:class:: DateTimeSensorAsync(*, target_time: Union[str, datetime.datetime], **kwargs)
Bases: :py:obj:`DateTimeSensor`
Waits until the specified datetime, deferring itself to avoid taking up
a worker slot while it is waiting.
It is a drop-in replacement for DateTimeSensor.
:param target_time: datetime after which the job succeeds. (templated)
:type target_time: str or datetime.datetime
.. py:method:: execute(self, context)
This is the main method to derive when creating an operator.
Context is the same dictionary used as when rendering jinja templates.
Refer to get_template_context for more context.
.. py:method:: execute_complete(self, context, event=None)
Callback for when the trigger fires - returns immediately.