Author: eevans Date: Wed Mar 30 19:02:41 2011 New Revision: 1087040 URL: http://svn.apache.org/viewvc?rev=1087040&view=rev Log: decode keys according to type too
Patch by eevans Modified: cassandra/trunk/drivers/py/cql/connection.py cassandra/trunk/drivers/py/cql/decoders.py cassandra/trunk/drivers/py/cql/results.py Modified: cassandra/trunk/drivers/py/cql/connection.py URL: http://svn.apache.org/viewvc/cassandra/trunk/drivers/py/cql/connection.py?rev=1087040&r1=1087039&r2=1087040&view=diff ============================================================================== --- cassandra/trunk/drivers/py/cql/connection.py (original) +++ cassandra/trunk/drivers/py/cql/connection.py Wed Mar 30 19:02:41 2011 @@ -97,6 +97,8 @@ class Connection(object): cfresults[cf.name] = {"comparator": cf.comparator_type} cfresults[cf.name]["default_validation_class"] = \ cf.default_validation_class + cfresults[cf.name]["key_validation_class"] = \ + cf.key_validation_class cfresults[cf.name]["columns"] = columns(cf.column_metadata) return cfresults Modified: cassandra/trunk/drivers/py/cql/decoders.py URL: http://svn.apache.org/viewvc/cassandra/trunk/drivers/py/cql/decoders.py?rev=1087040&r1=1087039&r2=1087040&view=diff ============================================================================== --- cassandra/trunk/drivers/py/cql/decoders.py (original) +++ cassandra/trunk/drivers/py/cql/decoders.py Wed Mar 30 19:02:41 2011 @@ -21,10 +21,16 @@ from marshal import unmarshal class BaseDecoder(object): def decode_column(self, keyspace, column_family, name, value): raise NotImplementedError() + + def decode_key(self, keyspace, column_family, key): + raise NotImplementedError() class NoopDecoder(BaseDecoder): def decode_column(self, keyspace, column_family, name, value): return (name, value) + + def decode_key(self, keyspace, column_family, key): + return key class SchemaDecoder(BaseDecoder): """ @@ -53,9 +59,18 @@ class SchemaDecoder(BaseDecoder): else: return cfam["default_validation_class"] return None + + def __keytype_for(self, keyspace, column_family, key): + cfam = self.__get_column_family_def(keyspace, column_family) + if cfam and cfam.has_key("key_validation_class"): + return cfam["key_validation_class"] + return None def decode_column(self, keyspace, column_family, name, value): comparator = self.__comparator_for(keyspace, column_family) validator = self.__validator_for(keyspace, column_family, name) return (unmarshal(name, comparator), unmarshal(value, validator)) + + def decode_key(self, keyspace, column_family, key): + return unmarshal(key, self.__keytype_for(keyspace, column_family, key)) Modified: cassandra/trunk/drivers/py/cql/results.py URL: http://svn.apache.org/viewvc/cassandra/trunk/drivers/py/cql/results.py?rev=1087040&r1=1087039&r2=1087040&view=diff ============================================================================== --- cassandra/trunk/drivers/py/cql/results.py (original) +++ cassandra/trunk/drivers/py/cql/results.py Wed Mar 30 19:02:41 2011 @@ -38,9 +38,16 @@ class RowsProxy(object): class Row(object): def __init__(self, key, columns, keyspace, cfam, decoder): - self.key = key + self._key = key + self.keyspace = keyspace + self.cfam = cfam + self.decoder = decoder self.columns = ColumnsProxy(columns, keyspace, cfam, decoder) - + + def __get_key(self): + return self.decoder.decode_key(self.keyspace, self.cfam, self._key) + key = property(__get_key) + def __iter__(self): return iter(self.columns) @@ -88,4 +95,4 @@ class Column(object): return "Column(%s, %s)" % (self.name, self.value) def __repr__(self): - return str(self) \ No newline at end of file + return str(self)