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

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

.. autoapi-nested-parse::

   This module contains a Google Cloud SQL Hook.



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

Classes
~~~~~~~

.. autoapisummary::

   airflow.providers.google.cloud.hooks.cloud_sql.CloudSqlOperationStatus
   airflow.providers.google.cloud.hooks.cloud_sql.CloudSQLHook
   airflow.providers.google.cloud.hooks.cloud_sql.CloudSqlProxyRunner
   airflow.providers.google.cloud.hooks.cloud_sql.CloudSQLDatabaseHook




Attributes
~~~~~~~~~~

.. autoapisummary::

   airflow.providers.google.cloud.hooks.cloud_sql.UNIX_PATH_MAX
   airflow.providers.google.cloud.hooks.cloud_sql.TIME_TO_SLEEP_IN_SECONDS
   airflow.providers.google.cloud.hooks.cloud_sql.CLOUD_SQL_PROXY_DOWNLOAD_URL
   airflow.providers.google.cloud.hooks.cloud_sql.CLOUD_SQL_PROXY_VERSION_DOWNLOAD_URL
   airflow.providers.google.cloud.hooks.cloud_sql.GCP_CREDENTIALS_KEY_PATH
   airflow.providers.google.cloud.hooks.cloud_sql.GCP_CREDENTIALS_KEYFILE_DICT
   airflow.providers.google.cloud.hooks.cloud_sql.CONNECTION_URIS
   airflow.providers.google.cloud.hooks.cloud_sql.CLOUD_SQL_VALID_DATABASE_TYPES


.. py:data:: UNIX_PATH_MAX
   :annotation: = 108

   

.. py:data:: TIME_TO_SLEEP_IN_SECONDS
   :annotation: = 20

   

.. py:class:: CloudSqlOperationStatus

   Helper class with operation statuses.

   .. py:attribute:: PENDING
      :annotation: = PENDING

      

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

      

   .. py:attribute:: DONE
      :annotation: = DONE

      

   .. py:attribute:: UNKNOWN
      :annotation: = UNKNOWN

      


.. py:class:: CloudSQLHook(api_version, gcp_conn_id = default_conn_name, delegate_to = None, impersonation_chain = None)

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

   Hook for Google Cloud SQL APIs.

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

   :param api_version: This is the version of the api.
   :param gcp_conn_id: The Airflow connection used for GCP credentials.
   :param delegate_to: This performs a task on one host with reference to other hosts.
   :param impersonation_chain: This is the optional service account to impersonate using short term
       credentials.

   .. py:attribute:: conn_name_attr
      :annotation: = gcp_conn_id

      

   .. py:attribute:: default_conn_name
      :annotation: = google_cloud_sql_default

      

   .. py:attribute:: conn_type
      :annotation: = gcpcloudsql

      

   .. py:attribute:: hook_name
      :annotation: = Google Cloud SQL

      

   .. py:method:: get_conn(self)

      Retrieves connection to Cloud SQL.

      :return: Google Cloud SQL services object.
      :rtype: dict


   .. py:method:: get_instance(self, instance, project_id)

      Retrieves a resource containing information about a Cloud SQL instance.

      :param instance: Database instance ID. This does not include the project ID.
      :param project_id: Project ID of the project that contains the instance. If set
          to None or missing, the default project_id from the Google Cloud connection is used.
      :return: A Cloud SQL instance resource.
      :rtype: dict


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

      Creates a new Cloud SQL instance.

      :param body: Body required by the Cloud SQL insert API, as described in
          https://cloud.google.com/sql/docs/mysql/admin-api/v1beta4/instances/insert#request-body.
      :param project_id: Project ID of the project that contains the instance. If set
          to None or missing, the default project_id from the Google Cloud connection is used.
      :return: None


   .. py:method:: patch_instance(self, body, instance, project_id)

      Updates settings of a Cloud SQL instance.

      Caution: This is not a partial update, so you must include values for
      all the settings that you want to retain.

      :param body: Body required by the Cloud SQL patch API, as described in
          https://cloud.google.com/sql/docs/mysql/admin-api/v1beta4/instances/patch#request-body.
      :param instance: Cloud SQL instance ID. This does not include the project ID.
      :param project_id: Project ID of the project that contains the instance. If set
          to None or missing, the default project_id from the Google Cloud connection is used.
      :return: None


   .. py:method:: delete_instance(self, instance, project_id)

      Deletes a Cloud SQL instance.

      :param project_id: Project ID of the project that contains the instance. If set
          to None or missing, the default project_id from the Google Cloud connection is used.
      :param instance: Cloud SQL instance ID. This does not include the project ID.
      :return: None


   .. py:method:: get_database(self, instance, database, project_id)

      Retrieves a database resource from a Cloud SQL instance.

      :param instance: Database instance ID. This does not include the project ID.
      :param database: Name of the database in the instance.
      :param project_id: Project ID of the project that contains the instance. If set
          to None or missing, the default project_id from the Google Cloud connection is used.
      :return: A Cloud SQL database resource, as described in
          https://cloud.google.com/sql/docs/mysql/admin-api/v1beta4/databases#resource.
      :rtype: dict


   .. py:method:: create_database(self, instance, body, project_id)

      Creates a new database inside a Cloud SQL instance.

      :param instance: Database instance ID. This does not include the project ID.
      :param body: The request body, as described in
          https://cloud.google.com/sql/docs/mysql/admin-api/v1beta4/databases/insert#request-body.
      :param project_id: Project ID of the project that contains the instance. If set
          to None or missing, the default project_id from the Google Cloud connection is used.
      :return: None


   .. py:method:: patch_database(self, instance, database, body, project_id)

      Updates a database resource inside a Cloud SQL instance.

      This method supports patch semantics.
      See https://cloud.google.com/sql/docs/mysql/admin-api/how-tos/performance#patch.

      :param instance: Database instance ID. This does not include the project ID.
      :param database: Name of the database to be updated in the instance.
      :param body: The request body, as described in
          https://cloud.google.com/sql/docs/mysql/admin-api/v1beta4/databases/insert#request-body.
      :param project_id: Project ID of the project that contains the instance. If set
          to None or missing, the default project_id from the Google Cloud connection is used.
      :return: None


   .. py:method:: delete_database(self, instance, database, project_id)

      Deletes a database from a Cloud SQL instance.

      :param instance: Database instance ID. This does not include the project ID.
      :param database: Name of the database to be deleted in the instance.
      :param project_id: Project ID of the project that contains the instance. If set
          to None or missing, the default project_id from the Google Cloud connection is used.
      :return: None


   .. py:method:: export_instance(self, instance, body, project_id)

      Exports data from a Cloud SQL instance to a Cloud Storage bucket as a SQL dump
      or CSV file.

      :param instance: Database instance ID of the Cloud SQL instance. This does not include the
          project ID.
      :param body: The request body, as described in
          https://cloud.google.com/sql/docs/mysql/admin-api/v1beta4/instances/export#request-body
      :param project_id: Project ID of the project that contains the instance. If set
          to None or missing, the default project_id from the Google Cloud connection is used.
      :return: None


   .. py:method:: import_instance(self, instance, body, project_id)

      Imports data into a Cloud SQL instance from a SQL dump or CSV file in
      Cloud Storage.

      :param instance: Database instance ID. This does not include the
          project ID.
      :param body: The request body, as described in
          https://cloud.google.com/sql/docs/mysql/admin-api/v1beta4/instances/import#request-body
      :param project_id: Project ID of the project that contains the instance. If set
          to None or missing, the default project_id from the Google Cloud connection is used.
      :return: None



.. py:data:: CLOUD_SQL_PROXY_DOWNLOAD_URL
   :annotation: = https://dl.google.com/cloudsql/cloud_sql_proxy.{}.{}

   

.. py:data:: CLOUD_SQL_PROXY_VERSION_DOWNLOAD_URL
   :annotation: = https://storage.googleapis.com/cloudsql-proxy/{}/cloud_sql_proxy.{}.{}

   

.. py:data:: GCP_CREDENTIALS_KEY_PATH
   :annotation: = extra__google_cloud_platform__key_path

   

.. py:data:: GCP_CREDENTIALS_KEYFILE_DICT
   :annotation: = extra__google_cloud_platform__keyfile_dict

   

.. py:class:: CloudSqlProxyRunner(path_prefix, instance_specification, gcp_conn_id = 'google_cloud_default', project_id = None, sql_proxy_version = None, sql_proxy_binary_path = None)

   Bases: :py:obj:`airflow.utils.log.logging_mixin.LoggingMixin`

   Downloads and runs cloud-sql-proxy as subprocess of the Python process.

   The cloud-sql-proxy needs to be downloaded and started before we can connect
   to the Google Cloud SQL instance via database connection. It establishes
   secure tunnel connection to the database. It authorizes using the
   Google Cloud credentials that are passed by the configuration.

   More details about the proxy can be found here:
   https://cloud.google.com/sql/docs/mysql/sql-proxy

   :param path_prefix: Unique path prefix where proxy will be downloaded and
       directories created for unix sockets.
   :param instance_specification: Specification of the instance to connect the
       proxy to. It should be specified in the form that is described in
       https://cloud.google.com/sql/docs/mysql/sql-proxy#multiple-instances in
       -instances parameter (typically in the form of ``<project>:<region>:<instance>``
       for UNIX socket connections and in the form of
       ``<project>:<region>:<instance>=tcp:<port>`` for TCP connections.
   :param gcp_conn_id: Id of Google Cloud connection to use for
       authentication
   :param project_id: Optional id of the Google Cloud project to connect to - it overwrites
       default project id taken from the Google Cloud connection.
   :param sql_proxy_version: Specific version of SQL proxy to download
       (for example 'v1.13'). By default latest version is downloaded.
   :param sql_proxy_binary_path: If specified, then proxy will be
       used from the path specified rather than dynamically generated. This means
       that if the binary is not present in that path it will also be downloaded.

   .. py:method:: start_proxy(self)

      Starts Cloud SQL Proxy.

      You have to remember to stop the proxy if you started it!


   .. py:method:: stop_proxy(self)

      Stops running proxy.

      You should stop the proxy after you stop using it.


   .. py:method:: get_proxy_version(self)

      Returns version of the Cloud SQL Proxy.


   .. py:method:: get_socket_path(self)

      Retrieves UNIX socket path used by Cloud SQL Proxy.

      :return: The dynamically generated path for the socket created by the proxy.
      :rtype: str



.. py:data:: CONNECTION_URIS
   :annotation: :Dict[str, Dict[str, Dict[str, str]]]

   

.. py:data:: CLOUD_SQL_VALID_DATABASE_TYPES
   :annotation: = ['postgres', 'mysql']

   

.. py:class:: CloudSQLDatabaseHook(gcp_cloudsql_conn_id = 'google_cloud_sql_default', gcp_conn_id = 'google_cloud_default', default_gcp_project_id = None)

   Bases: :py:obj:`airflow.hooks.base.BaseHook`

   Serves DB connection configuration for Google Cloud SQL (Connections
   of *gcpcloudsqldb://* type).

   The hook is a "meta" one. It does not perform an actual connection.
   It is there to retrieve all the parameters configured in gcpcloudsql:// connection,
   start/stop Cloud SQL Proxy if needed, dynamically generate Postgres or MySQL
   connection in the database and return an actual Postgres or MySQL hook.
   The returned Postgres/MySQL hooks are using direct connection or Cloud SQL
   Proxy socket/TCP as configured.

   Main parameters of the hook are retrieved from the standard URI components:

   * **user** - User name to authenticate to the database (from login of the URI).
   * **password** - Password to authenticate to the database (from password of the URI).
   * **public_ip** - IP to connect to for public connection (from host of the URI).
   * **public_port** - Port to connect to for public connection (from port of the URI).
   * **database** - Database to connect to (from schema of the URI).

   Remaining parameters are retrieved from the extras (URI query parameters):

   * **project_id** - Optional, Google Cloud project where the Cloud SQL
      instance exists. If missing, default project id passed is used.
   * **instance** -  Name of the instance of the Cloud SQL database instance.
   * **location** - The location of the Cloud SQL instance (for example europe-west1).
   * **database_type** - The type of the database instance (MySQL or Postgres).
   * **use_proxy** - (default False) Whether SQL proxy should be used to connect to Cloud
     SQL DB.
   * **use_ssl** - (default False) Whether SSL should be used to connect to Cloud SQL DB.
     You cannot use proxy and SSL together.
   * **sql_proxy_use_tcp** - (default False) If set to true, TCP is used to connect via
     proxy, otherwise UNIX sockets are used.
   * **sql_proxy_binary_path** - Optional path to Cloud SQL Proxy binary. If the binary
     is not specified or the binary is not present, it is automatically downloaded.
   * **sql_proxy_version** -  Specific version of the proxy to download (for example
     v1.13). If not specified, the latest version is downloaded.
   * **sslcert** - Path to client certificate to authenticate when SSL is used.
   * **sslkey** - Path to client private key to authenticate when SSL is used.
   * **sslrootcert** - Path to server's certificate to authenticate when SSL is used.

   :param gcp_cloudsql_conn_id: URL of the connection
   :param gcp_conn_id: The connection ID used to connect to Google Cloud for
       cloud-sql-proxy authentication.
   :param default_gcp_project_id: Default project id used if project_id not specified
          in the connection URL

   .. py:attribute:: conn_name_attr
      :annotation: = gcp_cloudsql_conn_id

      

   .. py:attribute:: default_conn_name
      :annotation: = google_cloud_sqldb_default

      

   .. py:attribute:: conn_type
      :annotation: = gcpcloudsqldb

      

   .. py:attribute:: hook_name
      :annotation: = Google Cloud SQL Database

      

   .. py:method:: validate_ssl_certs(self)

      SSL certificates validator.

      :return: None


   .. py:method:: validate_socket_path_length(self)

      Validates sockets path length.

      :return: None or rises AirflowException


   .. py:method:: create_connection(self)

      Create Connection object, according to whether it uses proxy, TCP, UNIX sockets, SSL.
      Connection ID will be randomly generated.


   .. py:method:: get_sqlproxy_runner(self)

      Retrieve Cloud SQL Proxy runner. It is used to manage the proxy
      lifecycle per task.

      :return: The Cloud SQL Proxy runner.
      :rtype: CloudSqlProxyRunner


   .. py:method:: get_database_hook(self, connection)

      Retrieve database hook. This is the actual Postgres or MySQL database hook
      that uses proxy or connects directly to the Google Cloud SQL database.


   .. py:method:: cleanup_database_hook(self)

      Clean up database hook after it was used.


   .. py:method:: reserve_free_tcp_port(self)

      Reserve free TCP port to be used by Cloud SQL Proxy


   .. py:method:: free_reserved_port(self)

      Free TCP port. Makes it immediately ready to be used by Cloud SQL Proxy.



