1717from cassandra .cqltypes import cql_typename
1818from cqlshlib .util import trim_if_present
1919from cqlshlib import cql3handling
20-
2120import cmd , sys
22-
23-
21+ try :
22+ import cassandra
23+ except ImportError as e :
24+ sys .exit ("\n Python Cassandra driver not installed, or not on PYTHONPATH.\n "
25+ 'You might try "pip install cassandra-driver".\n \n '
26+ 'Python: %s\n '
27+ 'Module load path: %r\n \n '
28+ 'Error: %s\n ' % (sys .executable , sys .path , e ))
29+
30+ from cassandra .auth import PlainTextAuthProvider
31+ from cassandra .cluster import Cluster , ExecutionProfile , EXEC_PROFILE_DEFAULT
32+ from cassandra .cqltypes import cql_typename
33+ from cassandra .marshal import int64_unpack
34+ from cassandra .metadata import (ColumnMetadata , KeyspaceMetadata , TableMetadata )
35+ from cassandra .policies import WhiteListRoundRobinPolicy
36+ from cassandra .query import SimpleStatement , ordered_dict_factory , TraceUnavailable
37+ from cassandra .util import datetime_from_timestamp
2438class NoKeyspaceError (Exception ):
2539 pass
2640
2741class ObjectNotFound (Exception ):
2842 pass
2943
44+ cqlruleset = None
45+
46+ CQL_ERRORS = (
47+ cassandra .AlreadyExists , cassandra .AuthenticationFailed , cassandra .CoordinationFailure ,
48+ cassandra .InvalidRequest , cassandra .Timeout , cassandra .Unauthorized , cassandra .OperationTimedOut ,
49+ cassandra .cluster .NoHostAvailable ,
50+ cassandra .connection .ConnectionBusy , cassandra .connection .ProtocolError , cassandra .connection .ConnectionException ,
51+ cassandra .protocol .ErrorMessage , cassandra .protocol .InternalError , cassandra .query .TraceUnavailable
52+ )
53+
54+ def cql_unprotect_name (self , namestr ):
55+ if namestr is None :
56+ return
57+ return cqlruleset .dequote_name (namestr )
58+
3059def get_object_meta (self , ks , name ):
3160 if name is None :
3261 if ks and ks in self .conn .metadata .keyspaces :
@@ -139,4 +168,44 @@ def describe_cluster_3x(self):
139168 ring = self .get_ring (self .current_keyspace )
140169 for entry in ring .items ():
141170 print (' %39s [%s]' % (str (entry [0 ].value ), ', ' .join ([host .address for host in entry [1 ]])))
142- print
171+ print
172+
173+ def do_describe_3x (self , parsed ):
174+ try :
175+ what = parsed .matched [1 ][1 ].lower ()
176+ if what == 'keyspaces' :
177+ describe_keyspaces_3x (self )
178+ elif what == 'keyspace' :
179+ ksname = self .cql_unprotect_name (parsed .get_binding ('ksname' , '' ))
180+ if not ksname :
181+ ksname = self .current_keyspace
182+ if ksname is None :
183+ self .printerr ('Not in any keyspace.' )
184+ return
185+ describe_keyspace_3x (self , ksname )
186+ elif what in ('columnfamily' , 'table' ):
187+ ks = self .cql_unprotect_name (parsed .get_binding ('ksname' , None ))
188+ cf = self .cql_unprotect_name (parsed .get_binding ('cfname' ))
189+ describe_columnfamily_3x (self , ks , cf )
190+ elif what in ('columnfamilies' , 'tables' ):
191+ describe_columnfamilies_3x (self , self .current_keyspace )
192+ elif what == 'desc ' :
193+ describe_schema_3x (self , False )
194+ elif what == 'full' and parsed .matched [2 ][1 ].lower () == 'schema' :
195+ describe_schema_3x (self , True )
196+ elif what == 'cluster' :
197+ describe_cluster_3x (self )
198+ elif what :
199+ ks = self .cql_unprotect_name (parsed .get_binding ('ksname' , None ))
200+ name = self .cql_unprotect_name (parsed .get_binding ('cfname' ))
201+ if not name :
202+ name = self .cql_unprotect_name (parsed .get_binding ('idxname' , None ))
203+ if not name :
204+ name = self .cql_unprotect_name (parsed .get_binding ('mvname' , None ))
205+ describe_object_3x (self , ks , name )
206+ except CQL_ERRORS as err :
207+ err_msg = err .message if hasattr (err , 'message' ) else str (err )
208+ self .printerr (err_msg .partition ("message=" )[2 ].strip ('"' ))
209+ except Exception :
210+ import traceback
211+ self .printerr (traceback .format_exc ())
0 commit comments