diff --git a/cqlengine/connection.py b/cqlengine/connection.py index da86e600..82c333bb 100644 --- a/cqlengine/connection.py +++ b/cqlengine/connection.py @@ -27,12 +27,14 @@ Host = namedtuple('Host', ['name', 'port']) cluster = None session = None +delayed_connect_args = None default_consistency_level = None def setup( hosts, default_keyspace, consistency=ConsistencyLevel.ONE, + delayed_connect=False, **kwargs): """ Records the hosts and connects to one of them @@ -43,8 +45,10 @@ def setup( :type default_keyspace: str :param consistency: The global consistency level :type consistency: int + :param delayed_connect: True if should not connect until first use + :type delayed_connect: bool """ - global cluster, session, default_consistency_level + global cluster, session, default_consistency_level, delayed_connect_args if 'username' in kwargs or 'password' in kwargs: raise CQLEngineException("Username & Password are now handled by using the native driver's auth_provider") @@ -54,6 +58,10 @@ def setup( models.DEFAULT_KEYSPACE = default_keyspace default_consistency_level = consistency + if delayed_connect: + delayed_connect_args = (hosts, default_keyspace, consistency, kwargs) + return + cluster = Cluster(hosts, **kwargs) session = cluster.connect() session.row_factory = dict_factory @@ -63,6 +71,8 @@ def execute(query, params=None, consistency_level=None): if not session: raise CQLEngineException("It is required to setup() cqlengine before executing queries") + handle_delayed_connect() + if consistency_level is None: consistency_level = default_consistency_level @@ -86,7 +96,16 @@ def execute(query, params=None, consistency_level=None): def get_session(): + handle_delayed_connect() return session def get_cluster(): + handle_delayed_connect() return cluster + +def handle_delayed_connect(): + global delayed_connect_args + if delayed_connect_args: + hosts, default_keyspace, consistency, kwargs = delayed_connect_args + delayed_connect_args = None + setup(hosts, default_keyspace, consistency, **kwargs)