Cloud
-----
Connecting
==========
To connect to a DataStax Astra cluster:

1. Download the secure connect bundle from your Astra account.
2. Connect to your cluster with

.. code-block:: python

    from cassandra.cluster import Cluster
    from cassandra.auth import PlainTextAuthProvider

    cloud_config = {
        'secure_connect_bundle': '/path/to/secure-connect-dbname.zip'
    }
    auth_provider = PlainTextAuthProvider(username='user', password='pass')
    cluster = Cluster(cloud=cloud_config, auth_provider=auth_provider)
    session = cluster.connect()

Cloud Config Options
====================

use_default_tempdir
+++++++++++++++++++

The secure connect bundle needs to be extracted to load the certificates into the SSLContext.
By default, the zip location is used as the base dir for the extraction. In some environments,
the zip location file system is read-only (e.g Azure Function). With *use_default_tempdir* set to *True*,
the default temporary directory of the system will be used as base dir.

.. code:: python

  cloud_config = {
        'secure_connect_bundle': '/path/to/secure-connect-dbname.zip',
        'use_default_tempdir': True
  }
  ...

connect_timeout
+++++++++++++++++++

As part of the process of connecting to Astra the Python driver will query a service to retrieve
current information about your cluster.  You can control the connection timeout for this operation
using *connect_timeout*.  If you observe errors in `read_metadata_info` you might consider increasing
this parameter.  This timeout is specified in seconds.

.. code:: python

  cloud_config = {
        'secure_connect_bundle': '/path/to/secure-connect-dbname.zip',
        'connect_timeout': 120
  }
  ...

Astra Differences
==================
In most circumstances, the client code for interacting with an Astra cluster will be the same as interacting with any other Cassandra cluster. The exceptions being:

* A cloud configuration must be passed to a :class:`~.Cluster` instance via the `cloud` attribute (as demonstrated above).
* An SSL connection will be established automatically. Manual SSL configuration is not allowed, and using `ssl_context` or `ssl_options` will result in an exception.
* A :class:`~.Cluster`'s `contact_points` attribute should not be used. The cloud config contains all of the necessary contact information.
* If a consistency level is not specified for an execution profile or query, then :attr:`.ConsistencyLevel.LOCAL_QUORUM` will be used as the default.


Limitations
===========

Event loops
^^^^^^^^^^^
Evenlet isn't yet supported for python 3.7+ due to an `issue in Eventlet <https://github.com/eventlet/eventlet/issues/526>`_.


CqlEngine
=========

When using the object mapper, you can configure cqlengine with :func:`~.cqlengine.connection.set_session`:

.. code:: python

  from cassandra.cqlengine import connection
  ...

  c = Cluster(cloud={'secure_connect_bundle':'/path/to/secure-connect-test.zip'},
              auth_provider=PlainTextAuthProvider('user', 'pass'))
  s = c.connect('myastrakeyspace')
  connection.set_session(s)
  ...

If you are using some third-party libraries (flask, django, etc.), you might not be able to change the
configuration mechanism. For this reason, the `hosts` argument of the default
:func:`~.cqlengine.connection.setup` function will be ignored if a `cloud` config is provided:

.. code:: python

  from cassandra.cqlengine import connection
  ...

  connection.setup(
    None,  # or anything else
    "myastrakeyspace", cloud={
      'secure_connect_bundle':'/path/to/secure-connect-test.zip'
    },
    auth_provider=PlainTextAuthProvider('user', 'pass'))
