You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by ee...@apache.org on 2011/03/30 21:02:42 UTC

svn commit: r1087040 - in /cassandra/trunk/drivers/py/cql: connection.py decoders.py results.py

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)