59 lines
1.6 KiB
Python
59 lines
1.6 KiB
Python
import struct
|
|
|
|
from cassandra import ConsistencyLevel
|
|
from cassandra.decoder import (cql_encoders, cql_encode_object,
|
|
cql_encode_map_collection,
|
|
cql_encode_set_collection,
|
|
cql_encode_list_collection)
|
|
|
|
class Query(object):
|
|
|
|
retry_policy = None
|
|
tracing_enabled = False
|
|
consistency_level = ConsistencyLevel.ONE
|
|
routing_key = None
|
|
|
|
|
|
class SimpleStatement(Query):
|
|
|
|
def __init__(self, query_string):
|
|
self._query_string = query_string
|
|
self._routing_key = None
|
|
|
|
@property
|
|
def routing_key(self):
|
|
return self._routing_key
|
|
|
|
@routing_key.setter
|
|
def set_routing_key(self, value):
|
|
self._routing_key = "".join(struct.pack("HsB", len(component), component, 0)
|
|
for component in value)
|
|
|
|
@property
|
|
def query_string(self):
|
|
return self._query_string
|
|
|
|
|
|
class ColumnCollection(object):
|
|
|
|
def __init__(self, sequence):
|
|
self.sequence = sequence
|
|
|
|
def __str__(self):
|
|
s = self.sequence
|
|
if isinstance(s, dict):
|
|
return cql_encode_map_collection(s)
|
|
elif isinstance(s, (set, frozenset)):
|
|
return cql_encode_set_collection(s)
|
|
else:
|
|
return cql_encode_list_collection(s)
|
|
|
|
|
|
def bind_params(query, params):
|
|
if isinstance(params, dict):
|
|
return query % dict((k, cql_encoders.get(type(v), cql_encode_object)(v))
|
|
for k, v in params.iteritems())
|
|
else:
|
|
return query % tuple(cql_encoders.get(type(v), cql_encode_object)(v)
|
|
for v in params)
|