:py:mod:`airflow.providers.dbt.cloud.hooks.dbt`
===============================================

.. py:module:: airflow.providers.dbt.cloud.hooks.dbt


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

Classes
~~~~~~~

.. autoapisummary::

   airflow.providers.dbt.cloud.hooks.dbt.TokenAuth
   airflow.providers.dbt.cloud.hooks.dbt.JobRunInfo
   airflow.providers.dbt.cloud.hooks.dbt.DbtCloudJobRunStatus
   airflow.providers.dbt.cloud.hooks.dbt.DbtCloudHook



Functions
~~~~~~~~~

.. autoapisummary::

   airflow.providers.dbt.cloud.hooks.dbt.fallback_to_default_account



.. py:function:: fallback_to_default_account(func)

   Decorator which provides a fallback value for ``account_id``. If the ``account_id`` is None or not passed
   to the decorated function, the value will be taken from the configured dbt Cloud Airflow Connection.


.. py:class:: TokenAuth(token)

   Bases: :py:obj:`requests.auth.AuthBase`

   Helper class for Auth when executing requests.

   .. py:method:: __call__(self, request)



.. py:class:: JobRunInfo

   Bases: :py:obj:`airflow.typing_compat.TypedDict`

   Type class for the ``job_run_info`` dictionary.

   .. py:attribute:: account_id
      :annotation: :int

      

   .. py:attribute:: run_id
      :annotation: :int

      


.. py:class:: DbtCloudJobRunStatus

   Bases: :py:obj:`enum.Enum`

   dbt Cloud Job statuses.

   .. py:attribute:: QUEUED
      :annotation: = 1

      

   .. py:attribute:: STARTING
      :annotation: = 2

      

   .. py:attribute:: RUNNING
      :annotation: = 3

      

   .. py:attribute:: SUCCESS
      :annotation: = 10

      

   .. py:attribute:: ERROR
      :annotation: = 20

      

   .. py:attribute:: CANCELLED
      :annotation: = 30

      

   .. py:attribute:: TERMINAL_STATUSES
      

      

   .. py:method:: check_is_valid(cls, statuses)
      :classmethod:

      Validates input statuses are a known value.


   .. py:method:: is_terminal(cls, status)
      :classmethod:

      Checks if the input status is that of a terminal type.



.. py:exception:: DbtCloudJobRunException

   Bases: :py:obj:`airflow.exceptions.AirflowException`

   An exception that indicates a job run failed to complete.


.. py:class:: DbtCloudHook(dbt_cloud_conn_id = default_conn_name, *args, **kwargs)

   Bases: :py:obj:`airflow.providers.http.hooks.http.HttpHook`

   Interact with dbt Cloud using the V2 API.

   :param dbt_cloud_conn_id: The ID of the :ref:`dbt Cloud connection <howto/connection:dbt-cloud>`.

   .. py:attribute:: conn_name_attr
      :annotation: = dbt_cloud_conn_id

      

   .. py:attribute:: default_conn_name
      :annotation: = dbt_cloud_default

      

   .. py:attribute:: conn_type
      :annotation: = dbt_cloud

      

   .. py:attribute:: hook_name
      :annotation: = dbt Cloud

      

   .. py:method:: get_ui_field_behaviour()
      :staticmethod:

      Builds custom field behavior for the dbt Cloud connection form in the Airflow UI.


   .. py:method:: connection(self)


   .. py:method:: get_conn(self, *args, **kwargs)

      Returns http session for use with requests

      :param headers: additional headers to be passed through as a dictionary


   .. py:method:: list_accounts(self)

      Retrieves all of the dbt Cloud accounts the configured API token is authorized to access.

      :return: List of request responses.


   .. py:method:: get_account(self, account_id = None)

      Retrieves metadata for a specific dbt Cloud account.

      :param account_id: Optional. The ID of a dbt Cloud account.
      :return: The request response.


   .. py:method:: list_projects(self, account_id = None)

      Retrieves metadata for all projects tied to a specified dbt Cloud account.

      :param account_id: Optional. The ID of a dbt Cloud account.
      :return: List of request responses.


   .. py:method:: get_project(self, project_id, account_id = None)

      Retrieves metadata for a specific project.

      :param project_id: The ID of a dbt Cloud project.
      :param account_id: Optional. The ID of a dbt Cloud account.
      :return: The request response.


   .. py:method:: list_jobs(self, account_id = None, order_by = None, project_id = None)

      Retrieves metadata for all jobs tied to a specified dbt Cloud account. If a ``project_id`` is
      supplied, only jobs pertaining to this job will be retrieved.

      :param account_id: Optional. The ID of a dbt Cloud account.
      :param order_by: Optional. Field to order the result by. Use '-' to indicate reverse order.
          For example, to use reverse order by the run ID use ``order_by=-id``.
      :param project_id: The ID of a dbt Cloud project.
      :return: List of request responses.


   .. py:method:: get_job(self, job_id, account_id = None)

      Retrieves metadata for a specific job.

      :param job_id: The ID of a dbt Cloud job.
      :param account_id: Optional. The ID of a dbt Cloud account.
      :return: The request response.


   .. py:method:: trigger_job_run(self, job_id, cause, account_id = None, steps_override = None, schema_override = None, additional_run_config = None)

      Triggers a run of a dbt Cloud job.

      :param job_id: The ID of a dbt Cloud job.
      :param cause: Description of the reason to trigger the job.
      :param account_id: Optional. The ID of a dbt Cloud account.
      :param steps_override: Optional. List of dbt commands to execute when triggering the job
          instead of those configured in dbt Cloud.
      :param schema_override: Optional. Override the destination schema in the configured target for this
          job.
      :param additional_run_config: Optional. Any additional parameters that should be included in the API
          request when triggering the job.
      :return: The request response.


   .. py:method:: list_job_runs(self, account_id = None, include_related = None, job_definition_id = None, order_by = None)

      Retrieves metadata for all of the dbt Cloud job runs for an account. If a ``job_definition_id`` is
      supplied, only metadata for runs of that specific job are pulled.

      :param account_id: Optional. The ID of a dbt Cloud account.
      :param include_related: Optional. List of related fields to pull with the run.
          Valid values are "trigger", "job", "repository", and "environment".
      :param job_definition_id: Optional. The dbt Cloud job ID to retrieve run metadata.
      :param order_by: Optional. Field to order the result by. Use '-' to indicate reverse order.
          For example, to use reverse order by the run ID use ``order_by=-id``.
      :return: List of request responses.


   .. py:method:: get_job_run(self, run_id, account_id = None, include_related = None)

      Retrieves metadata for a specific run of a dbt Cloud job.

      :param run_id: The ID of a dbt Cloud job run.
      :param account_id: Optional. The ID of a dbt Cloud account.
      :param include_related: Optional. List of related fields to pull with the run.
          Valid values are "trigger", "job", "repository", and "environment".
      :return: The request response.


   .. py:method:: get_job_run_status(self, run_id, account_id = None)

      Retrieves the status for a specific run of a dbt Cloud job.

      :param run_id: The ID of a dbt Cloud job run.
      :param account_id: Optional. The ID of a dbt Cloud account.
      :return: The status of a dbt Cloud job run.


   .. py:method:: wait_for_job_run_status(self, run_id, account_id = None, expected_statuses = DbtCloudJobRunStatus.SUCCESS.value, check_interval = 60, timeout = 60 * 60 * 24 * 7)

      Waits for a dbt Cloud job run to match an expected status.

      :param run_id: The ID of a dbt Cloud job run.
      :param account_id: Optional. The ID of a dbt Cloud account.
      :param expected_statuses: Optional. The desired status(es) to check against a job run's current
          status. Defaults to the success status value.
      :param check_interval: Time in seconds to check on a pipeline run's status.
      :param timeout: Time in seconds to wait for a pipeline to reach a terminal status or the expected
          status.
      :return: Boolean indicating if the job run has reached the ``expected_status``.


   .. py:method:: cancel_job_run(self, run_id, account_id = None)

      Cancel a specific dbt Cloud job run.

      :param run_id: The ID of a dbt Cloud job run.
      :param account_id: Optional. The ID of a dbt Cloud account.


   .. py:method:: list_job_run_artifacts(self, run_id, account_id = None, step = None)

      Retrieves a list of the available artifact files generated for a completed run of a dbt Cloud job. By
      default, this returns artifacts from the last step in the run. To list artifacts from other steps in
      the run, use the ``step`` parameter.

      :param run_id: The ID of a dbt Cloud job run.
      :param account_id: Optional. The ID of a dbt Cloud account.
      :param step: Optional. The index of the Step in the Run to query for artifacts. The first step in the
          run has the index 1. If the step parameter is omitted, artifacts for the last step in the run will
          be returned.
      :return: List of request responses.


   .. py:method:: get_job_run_artifact(self, run_id, path, account_id = None, step = None)

      Retrieves a list of the available artifact files generated for a completed run of a dbt Cloud job. By
      default, this returns artifacts from the last step in the run. To list artifacts from other steps in
      the run, use the ``step`` parameter.

      :param run_id: The ID of a dbt Cloud job run.
      :param path: The file path related to the artifact file. Paths are rooted at the target/ directory.
          Use "manifest.json", "catalog.json", or "run_results.json" to download dbt-generated artifacts
          for the run.
      :param account_id: Optional. The ID of a dbt Cloud account.
      :param step: Optional. The index of the Step in the Run to query for artifacts. The first step in the
          run has the index 1. If the step parameter is omitted, artifacts for the last step in the run will
          be returned.
      :return: The request response.


   .. py:method:: test_connection(self)

      Test dbt Cloud connection.



