:py:mod:`airflow.providers.slack.operators.slack`
=================================================

.. py:module:: airflow.providers.slack.operators.slack


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

Classes
~~~~~~~

.. autoapisummary::

   airflow.providers.slack.operators.slack.SlackAPIOperator
   airflow.providers.slack.operators.slack.SlackAPIPostOperator
   airflow.providers.slack.operators.slack.SlackAPIFileOperator




.. py:class:: SlackAPIOperator(*, slack_conn_id = None, token = None, method = None, api_params = None, **kwargs)

   Bases: :py:obj:`airflow.models.BaseOperator`

   Base Slack Operator
   The SlackAPIPostOperator is derived from this operator.
   In the future additional Slack API Operators will be derived from this class as well.
   Only one of `slack_conn_id` and `token` is required.

   :param slack_conn_id: :ref:`Slack connection id <howto/connection:slack>`
       which its password is Slack API token. Optional
   :param token: Slack API token (https://api.slack.com/web). Optional
   :param method: The Slack API Method to Call (https://api.slack.com/methods). Optional
   :param api_params: API Method call parameters (https://api.slack.com/methods). Optional
   :param client_args: Slack Hook parameters. Optional. Check airflow.providers.slack.hooks.SlackHook

   .. py:method:: construct_api_call_params(self)
      :abstractmethod:

      Used by the execute function. Allows templating on the source fields
      of the api_call_params dict before construction

      Override in child classes.
      Each SlackAPIOperator child class is responsible for
      having a construct_api_call_params function
      which sets self.api_call_params with a dict of
      API call parameters (https://api.slack.com/methods)


   .. py:method:: execute(self, **kwargs)

      The SlackAPIOperator calls will not fail even if the call is not unsuccessful.
      It should not prevent a DAG from completing in success



.. py:class:: SlackAPIPostOperator(channel = '#general', username = 'Airflow', text = 'No message has been set.\nHere is a cat video instead\nhttps://www.youtube.com/watch?v=J---aiyznGQ', icon_url = 'https://raw.githubusercontent.com/apache/airflow/main/airflow/www/static/pin_100.png', attachments = None, blocks = None, **kwargs)

   Bases: :py:obj:`SlackAPIOperator`

   Posts messages to a slack channel
   Examples:

   .. code-block:: python

       slack = SlackAPIPostOperator(
           task_id="post_hello",
           dag=dag,
           token="XXX",
           text="hello there!",
           channel="#random",
       )

   :param channel: channel in which to post message on slack name (#general) or
       ID (C12318391). (templated)
   :param username: Username that airflow will be posting to Slack as. (templated)
   :param text: message to send to slack. (templated)
   :param icon_url: url to icon used for this message
   :param attachments: extra formatting details. (templated)
       - see https://api.slack.com/docs/attachments.
   :param blocks: extra block layouts. (templated)
       - see https://api.slack.com/reference/block-kit/blocks.

   .. py:attribute:: template_fields
      :annotation: :Sequence[str] = ['username', 'text', 'attachments', 'blocks', 'channel']

      

   .. py:attribute:: ui_color
      :annotation: = #FFBA40

      

   .. py:method:: construct_api_call_params(self)

      Used by the execute function. Allows templating on the source fields
      of the api_call_params dict before construction

      Override in child classes.
      Each SlackAPIOperator child class is responsible for
      having a construct_api_call_params function
      which sets self.api_call_params with a dict of
      API call parameters (https://api.slack.com/methods)



.. py:class:: SlackAPIFileOperator(channel = '#general', initial_comment = 'No message has been set!', filename = None, filetype = None, content = None, **kwargs)

   Bases: :py:obj:`SlackAPIOperator`

   Send a file to a slack channel
   Examples:

   .. code-block:: python

       # Send file with filename and filetype
       slack_operator_file = SlackAPIFileOperator(
           task_id="slack_file_upload_1",
           dag=dag,
           slack_conn_id="slack",
           channel="#general",
           initial_comment="Hello World!",
           filename="/files/dags/test.txt",
           filetype="txt",
       )

       # Send file content
       slack_operator_file_content = SlackAPIFileOperator(
           task_id="slack_file_upload_2",
           dag=dag,
           slack_conn_id="slack",
           channel="#general",
           initial_comment="Hello World!",
           content="file content in txt",
       )

   :param channel: channel in which to sent file on slack name (templated)
   :param initial_comment: message to send to slack. (templated)
   :param filename: name of the file (templated)
   :param filetype: slack filetype. (templated)
       - see https://api.slack.com/types/file
   :param content: file content. (templated)

   .. py:attribute:: template_fields
      :annotation: :Sequence[str] = ['channel', 'initial_comment', 'filename', 'filetype', 'content']

      

   .. py:attribute:: ui_color
      :annotation: = #44BEDF

      

   .. py:method:: execute(self, **kwargs)

      The SlackAPIOperator calls will not fail even if the call is not unsuccessful.
      It should not prevent a DAG from completing in success



