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

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

.. autoapi-nested-parse::

   This module contains Google Datastore hook.



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

Classes
~~~~~~~

.. autoapisummary::

   airflow.providers.google.cloud.hooks.datastore.DatastoreHook




.. py:class:: DatastoreHook(gcp_conn_id = 'google_cloud_default', delegate_to = None, api_version = 'v1', impersonation_chain = None)

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

   Interact with Google Cloud Datastore. This hook uses the Google Cloud connection.

   This object is not threads safe. If you want to make multiple requests
   simultaneously, you will need to create a hook per thread.

   :param api_version: The version of the API it is going to connect to.

   .. py:method:: get_conn(self)

      Establishes a connection to the Google API.

      :return: a Google Cloud Datastore service object.
      :rtype: Resource


   .. py:method:: allocate_ids(self, partial_keys, project_id)

      Allocate IDs for incomplete keys.

      .. seealso::
          https://cloud.google.com/datastore/docs/reference/rest/v1/projects/allocateIds

      :param partial_keys: a list of partial keys.
      :param project_id: Google Cloud project ID against which to make the request.
      :return: a list of full keys.
      :rtype: list


   .. py:method:: begin_transaction(self, project_id, transaction_options)

      Begins a new transaction.

      .. seealso::
          https://cloud.google.com/datastore/docs/reference/rest/v1/projects/beginTransaction

      :param project_id: Google Cloud project ID against which to make the request.
      :param transaction_options: Options for a new transaction.
      :return: a transaction handle.
      :rtype: str


   .. py:method:: commit(self, body, project_id)

      Commit a transaction, optionally creating, deleting or modifying some entities.

      .. seealso::
          https://cloud.google.com/datastore/docs/reference/rest/v1/projects/commit

      :param body: the body of the commit request.
      :param project_id: Google Cloud project ID against which to make the request.
      :return: the response body of the commit request.
      :rtype: dict


   .. py:method:: lookup(self, keys, project_id, read_consistency = None, transaction = None)

      Lookup some entities by key.

      .. seealso::
          https://cloud.google.com/datastore/docs/reference/rest/v1/projects/lookup

      :param keys: the keys to lookup.
      :param read_consistency: the read consistency to use. default, strong or eventual.
                               Cannot be used with a transaction.
      :param transaction: the transaction to use, if any.
      :param project_id: Google Cloud project ID against which to make the request.
      :return: the response body of the lookup request.
      :rtype: dict


   .. py:method:: rollback(self, transaction, project_id)

      Roll back a transaction.

      .. seealso::
          https://cloud.google.com/datastore/docs/reference/rest/v1/projects/rollback

      :param transaction: the transaction to roll back.
      :param project_id: Google Cloud project ID against which to make the request.


   .. py:method:: run_query(self, body, project_id)

      Run a query for entities.

      .. seealso::
          https://cloud.google.com/datastore/docs/reference/rest/v1/projects/runQuery

      :param body: the body of the query request.
      :param project_id: Google Cloud project ID against which to make the request.
      :return: the batch of query results.
      :rtype: dict


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

      Gets the latest state of a long-running operation.

      .. seealso::
          https://cloud.google.com/datastore/docs/reference/data/rest/v1/projects.operations/get

      :param name: the name of the operation resource.
      :return: a resource operation instance.
      :rtype: dict


   .. py:method:: delete_operation(self, name)

      Deletes the long-running operation.

      .. seealso::
          https://cloud.google.com/datastore/docs/reference/data/rest/v1/projects.operations/delete

      :param name: the name of the operation resource.
      :return: none if successful.
      :rtype: dict


   .. py:method:: poll_operation_until_done(self, name, polling_interval_in_seconds)

      Poll backup operation state until it's completed.

      :param name: the name of the operation resource
      :param polling_interval_in_seconds: The number of seconds to wait before calling another request.
      :return: a resource operation instance.
      :rtype: dict


   .. py:method:: export_to_storage_bucket(self, bucket, project_id, namespace = None, entity_filter = None, labels = None)

      Export entities from Cloud Datastore to Cloud Storage for backup.

      .. note::
          Keep in mind that this requests the Admin API not the Data API.

      .. seealso::
          https://cloud.google.com/datastore/docs/reference/admin/rest/v1/projects/export

      :param bucket: The name of the Cloud Storage bucket.
      :param namespace: The Cloud Storage namespace path.
      :param entity_filter: Description of what data from the project is included in the export.
      :param labels: Client-assigned labels.
      :param project_id: Google Cloud project ID against which to make the request.
      :return: a resource operation instance.
      :rtype: dict


   .. py:method:: import_from_storage_bucket(self, bucket, file, project_id, namespace = None, entity_filter = None, labels = None)

      Import a backup from Cloud Storage to Cloud Datastore.

      .. note::
          Keep in mind that this requests the Admin API not the Data API.

      .. seealso::
          https://cloud.google.com/datastore/docs/reference/admin/rest/v1/projects/import

      :param bucket: The name of the Cloud Storage bucket.
      :param file: the metadata file written by the projects.export operation.
      :param namespace: The Cloud Storage namespace path.
      :param entity_filter: specify which kinds/namespaces are to be imported.
      :param labels: Client-assigned labels.
      :param project_id: Google Cloud project ID against which to make the request.
      :return: a resource operation instance.
      :rtype: dict



