Add default consistency level per-Session

Fixes PYTHON-14
This commit is contained in:
Tyler Hobbs
2014-05-09 17:03:49 -05:00
parent 29007fd516
commit 8908600c83
4 changed files with 26 additions and 9 deletions

View File

@@ -1,7 +1,11 @@
1.1.3
1.2.0
=====
In Progress
Features
--------
* Add Session.default_consistency_level (PYTHON-14)
Bug Fixes
---------
* Don't strip trailing underscores from column names when using the

View File

@@ -951,6 +951,15 @@ class Session(object):
timeout, neither the registered callback or errback will be called.
"""
default_consistency_level = ConsistencyLevel.ONE
"""
The default :class:`~ConsistencyLevel` for operations executed through
this session. This default may be overridden by setting the
:attr:`~.Statement.consistency_level` on individual statements.
.. versionadded:: 1.2.0
"""
max_trace_wait = 2.0
"""
The maximum amount of time (in seconds) the driver will wait for trace
@@ -1082,17 +1091,18 @@ class Session(object):
elif isinstance(query, PreparedStatement):
query = query.bind(parameters)
cl = query.consistency_level if query.consistency_level is not None else self.default_consistency_level
if isinstance(query, BoundStatement):
message = ExecuteMessage(
query_id=query.prepared_statement.query_id,
query_params=query.values,
consistency_level=query.consistency_level)
consistency_level=cl)
prepared_statement = query.prepared_statement
else:
query_string = query.query_string
if parameters:
query_string = bind_params(query.query_string, parameters)
message = QueryMessage(query=query_string, consistency_level=query.consistency_level)
message = QueryMessage(query=query_string, consistency_level=cl)
if trace:
message.tracing = True

View File

@@ -51,10 +51,11 @@ class Statement(object):
this will be set to a :class:`.QueryTrace` instance.
"""
consistency_level = ConsistencyLevel.ONE
consistency_level = None
"""
The :class:`.ConsistencyLevel` to be used for this operation. Defaults
to :attr:`.ConsistencyLevel.ONE`.
to :const:`None`, which means that the default consistency level for
the Session this is executed in will be used.
"""
_routing_key = None
@@ -119,7 +120,7 @@ class SimpleStatement(Statement):
return self._query_string
def __str__(self):
consistency = ConsistencyLevel.value_to_name[self.consistency_level]
consistency = ConsistencyLevel.value_to_name.get(self.consistency_level, 'Not Set')
return (u'<SimpleStatement query="%s", consistency=%s>' %
(self.query_string, consistency))
__repr__ = __str__
@@ -142,10 +143,10 @@ class PreparedStatement(object):
routing_key_indexes = None
consistency_level = ConsistencyLevel.ONE
consistency_level = None
def __init__(self, column_metadata, query_id, routing_key_indexes, query, keyspace,
consistency_level=ConsistencyLevel.ONE):
consistency_level=None):
self.column_metadata = column_metadata
self.query_id = query_id
self.routing_key_indexes = routing_key_indexes

View File

@@ -17,6 +17,7 @@ try:
except ImportError:
import unittest # noqa
from cassandra import ConsistencyLevel
from cassandra.query import PreparedStatement, BoundStatement, ValueSequence, SimpleStatement
from cassandra.cluster import Cluster
from cassandra.decoder import dict_factory
@@ -185,7 +186,7 @@ class PrintStatementTests(unittest.TestCase):
Highlight the format of printing SimpleStatements
"""
ss = SimpleStatement('SELECT * FROM test3rf.test')
ss = SimpleStatement('SELECT * FROM test3rf.test', consistency_level=ConsistencyLevel.ONE)
self.assertEqual(str(ss),
'<SimpleStatement query="SELECT * FROM test3rf.test", consistency=ONE>')
@@ -198,6 +199,7 @@ class PrintStatementTests(unittest.TestCase):
session = cluster.connect()
prepared = session.prepare('INSERT INTO test3rf.test (k, v) VALUES (?, ?)')
prepared.consistency_level = ConsistencyLevel.ONE
self.assertEqual(str(prepared),
'<PreparedStatement query="INSERT INTO test3rf.test (k, v) VALUES (?, ?)", consistency=ONE>')