From 8908600c8352cc674d4726506870aa757c5bb11c Mon Sep 17 00:00:00 2001 From: Tyler Hobbs Date: Fri, 9 May 2014 17:03:49 -0500 Subject: [PATCH] Add default consistency level per-Session Fixes PYTHON-14 --- CHANGELOG.rst | 6 +++++- cassandra/cluster.py | 14 ++++++++++++-- cassandra/query.py | 11 ++++++----- tests/integration/standard/test_query.py | 4 +++- 4 files changed, 26 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 234b16ba..3b7cd866 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -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 diff --git a/cassandra/cluster.py b/cassandra/cluster.py index fa9cd6f2..076686e1 100644 --- a/cassandra/cluster.py +++ b/cassandra/cluster.py @@ -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 diff --git a/cassandra/query.py b/cassandra/query.py index 0ef2584a..5fe354b1 100644 --- a/cassandra/query.py +++ b/cassandra/query.py @@ -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'' % (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 diff --git a/tests/integration/standard/test_query.py b/tests/integration/standard/test_query.py index a8d95207..789632d9 100644 --- a/tests/integration/standard/test_query.py +++ b/tests/integration/standard/test_query.py @@ -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), '') @@ -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), '')