:py:mod:`airflow.providers.google.cloud.hooks.cloud_composer`
=============================================================

.. py:module:: airflow.providers.google.cloud.hooks.cloud_composer


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

Classes
~~~~~~~

.. autoapisummary::

   airflow.providers.google.cloud.hooks.cloud_composer.CloudComposerHook




.. py:class:: CloudComposerHook(gcp_conn_id = 'google_cloud_default', delegate_to = None, impersonation_chain = None)

   Bases: :py:obj:`airflow.providers.google.common.hooks.base_google.GoogleBaseHook`

   Hook for Google Cloud Composer APIs.

   .. py:attribute:: client_options
      

      

   .. py:method:: get_environment_client(self)

      Retrieves client library object that allow access Environments service.


   .. py:method:: get_image_versions_client(self)

      Retrieves client library object that allow access Image Versions service.


   .. py:method:: wait_for_operation(self, operation, timeout = None)

      Waits for long-lasting operation to complete.


   .. py:method:: get_operation(self, operation_name)


   .. py:method:: get_environment_name(self, project_id, region, environment_id)


   .. py:method:: get_parent(self, project_id, region)


   .. py:method:: create_environment(self, project_id, region, environment, retry = DEFAULT, timeout = None, metadata = ())

      Create a new environment.

      :param project_id: Required. The ID of the Google Cloud project that the service belongs to.
      :param region: Required. The ID of the Google Cloud region that the service belongs to.
      :param environment:  The environment to create. This corresponds to the ``environment`` field on the
          ``request`` instance; if ``request`` is provided, this should not be set.
      :param retry: Designation of what errors, if any, should be retried.
      :param timeout: The timeout for this request.
      :param metadata: Strings which should be sent along with the request as metadata.


   .. py:method:: delete_environment(self, project_id, region, environment_id, retry = DEFAULT, timeout = None, metadata = ())

      Delete an environment.

      :param project_id: Required. The ID of the Google Cloud project that the service belongs to.
      :param region: Required. The ID of the Google Cloud region that the service belongs to.
      :param environment_id: Required. The ID of the Google Cloud environment that the service belongs to.
      :param retry: Designation of what errors, if any, should be retried.
      :param timeout: The timeout for this request.
      :param metadata: Strings which should be sent along with the request as metadata.


   .. py:method:: get_environment(self, project_id, region, environment_id, retry = DEFAULT, timeout = None, metadata = ())

      Get an existing environment.
      :param project_id: Required. The ID of the Google Cloud project that the service belongs to.
      :param region: Required. The ID of the Google Cloud region that the service belongs to.
      :param environment_id: Required. The ID of the Google Cloud environment that the service belongs to.
      :param retry: Designation of what errors, if any, should be retried.
      :param timeout: The timeout for this request.
      :param metadata: Strings which should be sent along with the request as metadata.


   .. py:method:: list_environments(self, project_id, region, page_size = None, page_token = None, retry = DEFAULT, timeout = None, metadata = ())

      List environments.

      :param project_id: Required. The ID of the Google Cloud project that the service belongs to.
      :param region: Required. The ID of the Google Cloud region that the service belongs to.
      :param page_size: The maximum number of environments to return.
      :param page_token: The next_page_token value returned from a previous List
          request, if any.
      :param retry: Designation of what errors, if any, should be retried.
      :param timeout: The timeout for this request.
      :param metadata: Strings which should be sent along with the request as metadata.


   .. py:method:: update_environment(self, project_id, region, environment_id, environment, update_mask, retry = DEFAULT, timeout = None, metadata = ())

      Update an environment.

      :param project_id: Required. The ID of the Google Cloud project that the service belongs to.
      :param region: Required. The ID of the Google Cloud region that the service belongs to.
      :param environment_id: Required. The ID of the Google Cloud environment that the service belongs to.
      :param environment:  A patch environment. Fields specified by the ``updateMask`` will be copied from
          the patch environment into the environment under update.

          This corresponds to the ``environment`` field on the ``request`` instance; if ``request`` is
          provided, this should not be set.
      :param update_mask:  Required. A comma-separated list of paths, relative to ``Environment``, of fields
          to update. If a dict is provided, it must be of the same form as the protobuf message
          :class:`~google.protobuf.field_mask_pb2.FieldMask`
      :param retry: Designation of what errors, if any, should be retried.
      :param timeout: The timeout for this request.
      :param metadata: Strings which should be sent along with the request as metadata.


   .. py:method:: list_image_versions(self, project_id, region, page_size = None, page_token = None, include_past_releases = False, retry = DEFAULT, timeout = None, metadata = ())

      List ImageVersions for provided location.

      :param project_id: Required. The ID of the Google Cloud project that the service belongs to.
      :param region: Required. The ID of the Google Cloud region that the service belongs to.
      :param page_size: The maximum number of environments to return.
      :param page_token: The next_page_token value returned from a previous List
          request, if any.
      :param include_past_releases: Flag to include past releases
      :param retry: Designation of what errors, if any, should be retried.
      :param timeout: The timeout for this request.
      :param metadata: Strings which should be sent along with the request as metadata.



