Skip to content

Commit 1a66430

Browse files
committed
cqlsh-expansion desc changes and unit test
1 parent 0d2284e commit 1a66430

File tree

4 files changed

+77
-45
lines changed

4 files changed

+77
-45
lines changed

cqlsh-expansion/bin/cqlsh-expansion.py

Lines changed: 1 addition & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1373,45 +1373,7 @@ def do_describe(self, parsed):
13731373
future = self.session.execute_async(stmt)
13741374

13751375
if self.connection_versions['build'][0] < '4':
1376-
try:
1377-
what = parsed.matched[1][1].lower()
1378-
if what == 'keyspaces':
1379-
describe_keyspaces_3x(self)
1380-
elif what == 'keyspace':
1381-
ksname = self.cql_unprotect_name(parsed.get_binding('ksname', ''))
1382-
if not ksname:
1383-
ksname = self.current_keyspace
1384-
if ksname is None:
1385-
self.printerr('Not in any keyspace.')
1386-
return
1387-
describe_keyspace_3x(self, ksname)
1388-
elif what in ('columnfamily', 'table'):
1389-
ks = self.cql_unprotect_name(parsed.get_binding('ksname', None))
1390-
cf = self.cql_unprotect_name(parsed.get_binding('cfname'))
1391-
describe_columnfamily_3x(self, ks, cf)
1392-
elif what in ('columnfamilies', 'tables'):
1393-
describe_columnfamilies_3x(self, self.current_keyspace)
1394-
elif what == 'desc ':
1395-
describe_schema_3x(self, False)
1396-
elif what == 'full' and parsed.matched[2][1].lower() == 'schema':
1397-
describe_schema_3x(self, True)
1398-
elif what == 'cluster':
1399-
describe_cluster_3x(self)
1400-
elif what:
1401-
ks = self.cql_unprotect_name(parsed.get_binding('ksname', None))
1402-
name = self.cql_unprotect_name(parsed.get_binding('cfname'))
1403-
if not name:
1404-
name = self.cql_unprotect_name(parsed.get_binding('idxname', None))
1405-
if not name:
1406-
name = self.cql_unprotect_name(parsed.get_binding('mvname', None))
1407-
describe_object_3x(self, ks, name)
1408-
except CQL_ERRORS as err:
1409-
err_msg = err.message if hasattr(err, 'message') else str(err)
1410-
self.printerr(err_msg.partition("message=")[2].strip('"'))
1411-
except Exception:
1412-
import traceback
1413-
self.printerr(traceback.format_exc())
1414-
1376+
do_describe_3x(self, parsed)
14151377
else:
14161378
try:
14171379
result = future.result()

cqlsh-expansion/config/cqlshrc_template

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
;; will be passed to the constructor
3131
module = cassandra_sigv4.auth
3232
classname = SigV4AuthProvider
33-
region_name = us-east-1
33+
;region_name = us-east-1
3434
; module = cassandra.auth
3535
; classname = PlainTextAuthProvider
3636

cqlsh-expansion/pylib/cqlshlib/legacydesc3x.py

Lines changed: 73 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,45 @@
1717
from cassandra.cqltypes import cql_typename
1818
from cqlshlib.util import trim_if_present
1919
from cqlshlib import cql3handling
20-
2120
import cmd, sys
22-
23-
21+
try:
22+
import cassandra
23+
except ImportError as e:
24+
sys.exit("\nPython 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
2438
class NoKeyspaceError(Exception):
2539
pass
2640

2741
class 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+
3059
def 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())

docker/test/toolkit-test.sh

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -218,8 +218,9 @@ docker run --rm -t \
218218

219219
#connect without sigv4
220220
docker run --rm -t \
221+
-v "$(pwd)":/source \
221222
amazon/amazon-keyspaces-toolkit $HOST $PORT \
222-
-u "$SERVICEUSERNAME" -p "$SERVICEPASSWORD" --ssl \
223+
-u "$SERVICEUSERNAME" -p "$SERVICEPASSWORD" --ssl --cqlshrc="/source/docker/test/default_cqlshrc" \
223224
--execute "SHOW VERSION; SHOW HOST;"
224225

225226
# cqlsh-expansion tests with auth provider SigV4AuthProvider from cqlshrc file

0 commit comments

Comments
 (0)