def execute(self, query, *args, **kwargs): """ Execute a CQL query on a remote node. Params: * query .........: CQL query string. * args ..........: Query parameters. * compression ...: Query compression type (optional). """ def _error(err): if isinstance(err, InvalidRequestException): raise CQLException("Bad Request: %s" % err.why) elif isinstance(err, TApplicationException): raise CQLException("Internal application error") elif isinstance(err, SchemaDisagreementException): raise CQLException("schema versions disagree, (try again later).") else: raise CQLException(err) def _success(response): if response.type == CqlResultType.ROWS: return RowsProxy(response.rows, self.keyspace, self.column_family, self.decoder) if response.type == CqlResultType.INT: return response.num return None if kwargs.has_key("compression"): compress = kwargs.get("compression").upper() else: compress = DEFAULT_COMPRESSION compressed_query = connection.compress_query(self.prepare(query, *args), compress) request_compression = getattr(Compression, compress) d = self.client.execute_cql_query(compressed_query, request_compression) d.addCallbacks(_success, _error) return d