:py:mod:`airflow.providers.amazon.aws.sensors.step_function`
============================================================

.. py:module:: airflow.providers.amazon.aws.sensors.step_function


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

Classes
~~~~~~~

.. autoapisummary::

   airflow.providers.amazon.aws.sensors.step_function.StepFunctionExecutionSensor




.. py:class:: StepFunctionExecutionSensor(*, execution_arn, aws_conn_id = 'aws_default', region_name = None, **kwargs)

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

   Asks for the state of the AWS Step Function State Machine Execution until it
   reaches a failure state or success state.
   If it fails, then fail the task.

   On successful completion of the Execution the Sensor will do an XCom Push
   of the State Machine's output to `output`

   .. seealso::
       For more information on how to use this sensor, take a look at the guide:
       :ref:`howto/operator:StepFunctionExecutionSensor`

   :param execution_arn: execution_arn to check the state of
   :param aws_conn_id: aws connection to use, defaults to 'aws_default'

   .. py:attribute:: INTERMEDIATE_STATES
      :annotation: = ['RUNNING']

      

   .. py:attribute:: FAILURE_STATES
      :annotation: = ['FAILED', 'TIMED_OUT', 'ABORTED']

      

   .. py:attribute:: SUCCESS_STATES
      :annotation: = ['SUCCEEDED']

      

   .. py:attribute:: template_fields
      :annotation: :Sequence[str] = ['execution_arn']

      

   .. py:attribute:: template_ext
      :annotation: :Sequence[str] = []

      

   .. py:attribute:: ui_color
      :annotation: = #66c3ff

      

   .. py:method:: poke(self, context)

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


   .. py:method:: get_hook(self)

      Create and return a StepFunctionHook



