:py:mod:`airflow.sensors.weekday`
=================================

.. py:module:: airflow.sensors.weekday


Module Contents
---------------

Classes
~~~~~~~

.. autoapisummary::

   airflow.sensors.weekday.DayOfWeekSensor




.. py:class:: DayOfWeekSensor(*, week_day, use_task_logical_date=False, use_task_execution_day=False, **kwargs)

   Bases: :py:obj:`airflow.sensors.base.BaseSensorOperator`

   Waits until the first specified day of the week. For example, if the execution
   day of the task is '2018-12-22' (Saturday) and you pass 'FRIDAY', the task will wait
   until next Friday.

   **Example** (with single day): ::

       weekend_check = DayOfWeekSensor(
           task_id='weekend_check',
           week_day='Saturday',
           use_task_logical_date=True,
           dag=dag)

   **Example** (with multiple day using set): ::

       weekend_check = DayOfWeekSensor(
           task_id='weekend_check',
           week_day={'Saturday', 'Sunday'},
           use_task_logical_date=True,
           dag=dag)

   **Example** (with :class:`~airflow.utils.weekday.WeekDay` enum): ::

       # import WeekDay Enum
       from airflow.utils.weekday import WeekDay

       weekend_check = DayOfWeekSensor(
           task_id='weekend_check',
           week_day={WeekDay.SATURDAY, WeekDay.SUNDAY},
           use_task_logical_date=True,
           dag=dag)

   :param week_day: Day of the week to check (full name). Optionally, a set
       of days can also be provided using a set.
       Example values:

           * ``"MONDAY"``,
           * ``{"Saturday", "Sunday"}``
           * ``{WeekDay.TUESDAY}``
           * ``{WeekDay.SATURDAY, WeekDay.SUNDAY}``

   :param use_task_logical_date: If ``True``, uses task's logical date to compare
       with week_day. Execution Date is Useful for backfilling.
       If ``False``, uses system's day of the week. Useful when you
       don't want to run anything on weekdays on the system.

   .. py:method:: poke(context)

      Function that the sensors defined while deriving this class should
      override.



