#!/usr/bin/env python
#
# Autogenerated by Thrift
#
# DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
#

import sys
import pprint
from urlparse import urlparse
from thrift.transport import TTransport
from thrift.transport import TSocket
from thrift.transport import THttpClient
from thrift.protocol import TBinaryProtocol

from cassandra import Cassandra
from cassandra.ttypes import *

if len(sys.argv) <= 1 or sys.argv[1] == '--help':
  print ''
  print 'Usage: ' + sys.argv[0] + ' [-h host:port] [-u url] [-f[ramed]] function [arg1 [arg2...]]'
  print ''
  print 'Functions:'
  print '  void login(string keyspace, AuthenticationRequest auth_request)'
  print '  ColumnOrSuperColumn get(string keyspace, string key, ColumnPath column_path, ConsistencyLevel consistency_level)'
  print '   get_slice(string keyspace, string key, ColumnParent column_parent, SlicePredicate predicate, ConsistencyLevel consistency_level)'
  print '   multiget(string keyspace,  keys, ColumnPath column_path, ConsistencyLevel consistency_level)'
  print '   multiget_slice(string keyspace,  keys, ColumnParent column_parent, SlicePredicate predicate, ConsistencyLevel consistency_level)'
  print '  i32 get_count(string keyspace, string key, ColumnParent column_parent, ConsistencyLevel consistency_level)'
  print '   get_range_slice(string keyspace, ColumnParent column_parent, SlicePredicate predicate, string start_key, string finish_key, i32 row_count, ConsistencyLevel consistency_level)'
  print '   get_range_slices(string keyspace, ColumnParent column_parent, SlicePredicate predicate, KeyRange range, ConsistencyLevel consistency_level)'
  print '  void insert(string keyspace, string key, ColumnPath column_path, string value, i64 timestamp, ConsistencyLevel consistency_level)'
  print '  void batch_insert(string keyspace, string key,  cfmap, ConsistencyLevel consistency_level)'
  print '  void remove(string keyspace, string key, ColumnPath column_path, i64 timestamp, ConsistencyLevel consistency_level)'
  print '  void batch_mutate(string keyspace,  mutation_map, ConsistencyLevel consistency_level)'
  print '  string get_string_property(string property)'
  print '   get_string_list_property(string property)'
  print '   describe_keyspaces()'
  print '  string describe_cluster_name()'
  print '  string describe_version()'
  print '   describe_ring(string keyspace)'
  print '   describe_keyspace(string keyspace)'
  print '   describe_splits(string start_token, string end_token, i32 keys_per_split)'
  print ''
  sys.exit(0)

pp = pprint.PrettyPrinter(indent = 2)
host = 'localhost'
port = 9090
uri = ''
framed = False
http = False
argi = 1

if sys.argv[argi] == '-h':
  parts = sys.argv[argi+1].split(':')
  host = parts[0]
  port = int(parts[1])
  argi += 2

if sys.argv[argi] == '-u':
  url = urlparse(sys.argv[argi+1])
  parts = url[1].split(':')
  host = parts[0]
  if len(parts) > 1:
    port = int(parts[1])
  else:
    port = 80
  uri = url[2]
  http = True
  argi += 2

if sys.argv[argi] == '-f' or sys.argv[argi] == '-framed':
  framed = True
  argi += 1

cmd = sys.argv[argi]
args = sys.argv[argi+1:]

if http:
  transport = THttpClient.THttpClient(host, port, uri)
else:
  socket = TSocket.TSocket(host, port)
  if framed:
    transport = TTransport.TFramedTransport(socket)
  else:
    transport = TTransport.TBufferedTransport(socket)
protocol = TBinaryProtocol.TBinaryProtocol(transport)
client = Cassandra.Client(protocol)
transport.open()

if cmd == 'login':
  if len(args) != 2:
    print 'login requires 2 args'
    sys.exit(1)
  pp.pprint(client.login(args[0],eval(args[1]),))

elif cmd == 'get':
  if len(args) != 4:
    print 'get requires 4 args'
    sys.exit(1)
  pp.pprint(client.get(args[0],args[1],eval(args[2]),eval(args[3]),))

elif cmd == 'get_slice':
  if len(args) != 5:
    print 'get_slice requires 5 args'
    sys.exit(1)
  pp.pprint(client.get_slice(args[0],args[1],eval(args[2]),eval(args[3]),eval(args[4]),))

elif cmd == 'multiget':
  if len(args) != 4:
    print 'multiget requires 4 args'
    sys.exit(1)
  pp.pprint(client.multiget(args[0],eval(args[1]),eval(args[2]),eval(args[3]),))

elif cmd == 'multiget_slice':
  if len(args) != 5:
    print 'multiget_slice requires 5 args'
    sys.exit(1)
  pp.pprint(client.multiget_slice(args[0],eval(args[1]),eval(args[2]),eval(args[3]),eval(args[4]),))

elif cmd == 'get_count':
  if len(args) != 4:
    print 'get_count requires 4 args'
    sys.exit(1)
  pp.pprint(client.get_count(args[0],args[1],eval(args[2]),eval(args[3]),))

elif cmd == 'get_range_slice':
  if len(args) != 7:
    print 'get_range_slice requires 7 args'
    sys.exit(1)
  pp.pprint(client.get_range_slice(args[0],eval(args[1]),eval(args[2]),args[3],args[4],eval(args[5]),eval(args[6]),))

elif cmd == 'get_range_slices':
  if len(args) != 5:
    print 'get_range_slices requires 5 args'
    sys.exit(1)
  pp.pprint(client.get_range_slices(args[0],eval(args[1]),eval(args[2]),eval(args[3]),eval(args[4]),))

elif cmd == 'insert':
  if len(args) != 6:
    print 'insert requires 6 args'
    sys.exit(1)
  pp.pprint(client.insert(args[0],args[1],eval(args[2]),args[3],eval(args[4]),eval(args[5]),))

elif cmd == 'batch_insert':
  if len(args) != 4:
    print 'batch_insert requires 4 args'
    sys.exit(1)
  pp.pprint(client.batch_insert(args[0],args[1],eval(args[2]),eval(args[3]),))

elif cmd == 'remove':
  if len(args) != 5:
    print 'remove requires 5 args'
    sys.exit(1)
  pp.pprint(client.remove(args[0],args[1],eval(args[2]),eval(args[3]),eval(args[4]),))

elif cmd == 'batch_mutate':
  if len(args) != 3:
    print 'batch_mutate requires 3 args'
    sys.exit(1)
  pp.pprint(client.batch_mutate(args[0],eval(args[1]),eval(args[2]),))

elif cmd == 'get_string_property':
  if len(args) != 1:
    print 'get_string_property requires 1 args'
    sys.exit(1)
  pp.pprint(client.get_string_property(args[0],))

elif cmd == 'get_string_list_property':
  if len(args) != 1:
    print 'get_string_list_property requires 1 args'
    sys.exit(1)
  pp.pprint(client.get_string_list_property(args[0],))

elif cmd == 'describe_keyspaces':
  if len(args) != 0:
    print 'describe_keyspaces requires 0 args'
    sys.exit(1)
  pp.pprint(client.describe_keyspaces())

elif cmd == 'describe_cluster_name':
  if len(args) != 0:
    print 'describe_cluster_name requires 0 args'
    sys.exit(1)
  pp.pprint(client.describe_cluster_name())

elif cmd == 'describe_version':
  if len(args) != 0:
    print 'describe_version requires 0 args'
    sys.exit(1)
  pp.pprint(client.describe_version())

elif cmd == 'describe_ring':
  if len(args) != 1:
    print 'describe_ring requires 1 args'
    sys.exit(1)
  pp.pprint(client.describe_ring(args[0],))

elif cmd == 'describe_keyspace':
  if len(args) != 1:
    print 'describe_keyspace requires 1 args'
    sys.exit(1)
  pp.pprint(client.describe_keyspace(args[0],))

elif cmd == 'describe_splits':
  if len(args) != 3:
    print 'describe_splits requires 3 args'
    sys.exit(1)
  pp.pprint(client.describe_splits(args[0],args[1],eval(args[2]),))

transport.close()
