:py:mod:`airflow.providers.google.firebase.hooks.firestore`
===========================================================

.. py:module:: airflow.providers.google.firebase.hooks.firestore

.. autoapi-nested-parse::

   Hook for Google Cloud Firestore service



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

Classes
~~~~~~~

.. autoapisummary::

   airflow.providers.google.firebase.hooks.firestore.CloudFirestoreHook




Attributes
~~~~~~~~~~

.. autoapisummary::

   airflow.providers.google.firebase.hooks.firestore.TIME_TO_SLEEP_IN_SECONDS


.. py:data:: TIME_TO_SLEEP_IN_SECONDS
   :annotation: = 5

   

.. py:class:: CloudFirestoreHook(api_version = 'v1', 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 the Google Firestore APIs.

   All the methods in the hook where project_id is used must be called with
   keyword arguments rather than positional.

   :param api_version: API version used (for example v1 or v1beta1).
   :param gcp_conn_id: The connection ID to use when fetching connection info.
   :param delegate_to: The account to impersonate using domain-wide delegation of authority,
       if any. For this to work, the service account making the request must have
       domain-wide delegation enabled.
   :param impersonation_chain: Optional service account to impersonate using short-term
       credentials, or chained list of accounts required to get the access_token
       of the last account in the list, which will be impersonated in the request.
       If set as a string, the account must grant the originating account
       the Service Account Token Creator IAM role.
       If set as a sequence, the identities from the list must grant
       Service Account Token Creator IAM role to the directly preceding identity, with first
       account from the list granting this role to the originating account.

   .. py:method:: get_conn(self)

      Retrieves the connection to Cloud Firestore.

      :return: Google Cloud Firestore services object.


   .. py:method:: export_documents(self, body, database_id = '(default)', project_id = None)

      Starts a export with the specified configuration.

      :param database_id: The Database ID.
      :param body: The request body.
          See:
          https://firebase.google.com/docs/firestore/reference/rest/v1beta1/projects.databases/exportDocuments
      :param project_id: Optional, Google Cloud Project project_id where the database belongs.
          If set to None or missing, the default project_id from the Google Cloud connection is used.



