Simplify pylib/cqlshlib/helptopics.py using associative array

patch by Vineet Gali; reviewed by Stefan Miklosovic and Brandon Williams for CASSANDRA-18726
This commit is contained in:
vgali7 2023-08-04 15:14:03 -05:00 committed by Stefan Miklosovic
parent 53d1644ff4
commit d24baecac9
No known key found for this signature in database
GPG Key ID: 32F35CB2F546D93E
4 changed files with 76 additions and 180 deletions

View File

@ -23,8 +23,6 @@ simple_cql_types = {'ascii', 'bigint', 'blob', 'boolean', 'counter', 'date', 'de
'varint'}
simple_cql_types.difference_update(('set', 'map', 'list'))
cqldocs = helptopics.CQL3HelpTopics()
class UnexpectedTableStructure(UserWarning):

View File

@ -31,6 +31,8 @@ from contextlib import contextmanager
from io import StringIO
from uuid import UUID
from cqlshlib.helptopics import get_html_anchor, get_html_topics
UTF8 = 'utf-8'
description = "CQL Shell for Apache Cassandra"
@ -1795,6 +1797,9 @@ class Shell(cmd.Cmd):
pdb.set_trace()
def get_help_topics(self):
"""
List of 'do_' methods having method comments
"""
topics = [t[3:] for t in dir(self) if t.startswith('do_') and getattr(self, t, None).__doc__]
for hide_from_help in ('quit',):
topics.remove(hide_from_help)
@ -1815,15 +1820,15 @@ class Shell(cmd.Cmd):
if not topics:
shell_topics = [t.upper() for t in self.get_help_topics()]
self.print_topics("\nDocumented shell commands:", shell_topics, 15, 80)
cql_topics = [t.upper() for t in cqldocs.get_help_topics()]
cql_topics = [t.upper() for t in get_html_topics()]
self.print_topics("CQL help topics:", cql_topics, 15, 80)
return
for t in topics:
if t.lower() in self.get_help_topics():
doc = getattr(self, 'do_' + t.lower()).__doc__
self.stdout.write(doc + "\n")
elif t.lower() in cqldocs.get_help_topics():
urlpart = cqldocs.get_help_topic(t)
elif t.lower() in get_html_topics():
urlpart = get_html_anchor(t)
if urlpart is not None:
url = "%s#%s" % (CASSANDRA_CQL_HTML, urlpart)
if self.browser is not None:
@ -2217,11 +2222,6 @@ def setup_cqlruleset(cqlmodule):
cqlruleset.commands_end_with_newline.update(cqlshhandling.my_commands_ending_with_newline)
def setup_cqldocs(cqlmodule):
global cqldocs
cqldocs = cqlmodule.cqldocs
def setup_docspath(path):
global CASSANDRA_CQL_HTML
CASSANDRA_CQL_HTML_FALLBACK = 'https://cassandra.apache.org/doc/latest/cql/index.html'
@ -2269,7 +2269,6 @@ def main(cmdline, pkgpath):
setup_docspath(pkgpath)
setup_cqlruleset(options.cqlmodule)
setup_cqldocs(options.cqlmodule)
csv.field_size_limit(options.field_size_limit)
if options.file is None:

View File

@ -15,176 +15,74 @@
# limitations under the License.
class CQL3HelpTopics:
def get_help_topics(self):
return [t[5:] for t in dir(self) if t.startswith('help_')]
"""
html_help_topics maps topics to HTML anchors
"""
html_help_topics = {
'aggregates': 'aggregates',
'alter_keyspace': 'alterKeyspaceStmt',
'alter_materialized_view': 'alterMVStmt',
'alter_table': 'alterTableStmt',
'alter_type': 'alterTypeStmt',
'alter_user': 'alterUserStmt',
'apply': 'batchStmt',
'ascii': 'constants',
'batch': 'batchStmt',
'begin': 'batchStmt',
'blob': 'constants',
'boolean': 'boolean',
'counter': 'counters',
'create_aggregate': 'createAggregateStmt',
'create_columnfamily': 'createTableStmt',
'create_function': 'createFunctionStmt',
'create_index': 'createIndexStmt',
'create_keyspace': 'createKeyspaceStmt',
'create_materialized_view': 'createMVStmt',
'create_role': 'createRoleStmt',
'create_table': 'createTableStmt',
'create_trigger': 'createTriggerStmt',
'create_type': 'createTypeStmt',
'create_user': 'createUserStmt',
'date': 'usingdates',
'delete': 'deleteStmt',
'drop_aggregate': 'dropAggregateStmt',
'drop_columnfamily': 'dropTableStmt',
'drop_function': 'dropFunctionStmt',
'drop_index': 'dropIndexStmt',
'drop_keyspace': 'dropKeyspaceStmt',
'drop_materialized_view': 'dropMVStmt',
'drop_role': 'dropRoleStmt',
'drop_table': 'dropTableStmt',
'drop_trigger': 'dropTriggerStmt',
'drop_type': 'dropTypeStmt',
'drop_user': 'dropUserStmt',
'functions': 'functions',
'grant': 'grantRoleStmt',
'insert': 'insertStmt',
'insert_json': 'insertJson',
'int': 'constants',
'json': 'json',
'keywords': 'appendixA',
'list_permissions': 'listPermissionsStmt',
'list_roles': 'listRolesStmt',
'list_users': 'listUsersStmt',
'permissions': 'permissions',
'revoke': 'revokeRoleStmt',
'select': 'selectStmt',
'select_json': 'selectJson',
'text': 'constants',
'time': 'usingtime',
'timestamp': 'usingtimestamps',
'truncate': 'truncateStmt',
'types': 'types',
'update': 'updateStmt',
'use': 'useStmt',
'uuid': 'constants'}
def get_help_topic(self, topic):
return getattr(self, 'help_' + topic.lower())()
def help_types(self):
return 'types'
def get_html_topics():
return list(html_help_topics.keys())
def help_timestamp(self):
return 'usingtimestamps'
def help_date(self):
return 'usingdates'
def help_time(self):
return 'usingtime'
def help_blob(self):
return 'constants'
def help_uuid(self):
return 'constants'
def help_boolean(self):
return 'constants'
def help_int(self):
return 'constants'
def help_counter(self):
return 'counters'
def help_text(self):
return 'constants'
help_ascii = help_text
def help_use(self):
return 'useStmt'
def help_insert(self):
return 'insertStmt'
def help_update(self):
return 'updateStmt'
def help_delete(self):
return 'deleteStmt'
def help_select(self):
return 'selectStmt'
def help_json(self):
return 'json'
def help_select_json(self):
return 'selectJson'
def help_insert_json(self):
return 'insertJson'
def help_batch(self):
return 'batchStmt'
help_begin = help_batch
help_apply = help_batch
def help_create_keyspace(self):
return 'createKeyspaceStmt'
def help_alter_keyspace(self):
return 'alterKeyspaceStmt'
def help_drop_keyspace(self):
return 'dropKeyspaceStmt'
def help_create_table(self):
return 'createTableStmt'
help_create_columnfamily = help_create_table
def help_alter_table(self):
return 'alterTableStmt'
def help_drop_table(self):
return 'dropTableStmt'
help_drop_columnfamily = help_drop_table
def help_create_index(self):
return 'createIndexStmt'
def help_drop_index(self):
return 'dropIndexStmt'
def help_truncate(self):
return 'truncateStmt'
def help_create_type(self):
return 'createTypeStmt'
def help_alter_type(self):
return 'alterTypeStmt'
def help_drop_type(self):
return 'dropTypeStmt'
def help_create_function(self):
return 'createFunctionStmt'
def help_drop_function(self):
return 'dropFunctionStmt'
def help_functions(self):
return 'functions'
def help_create_aggregate(self):
return 'createAggregateStmt'
def help_drop_aggregate(self):
return 'dropAggregateStmt'
def help_aggregates(self):
return 'aggregates'
def help_create_trigger(self):
return 'createTriggerStmt'
def help_drop_trigger(self):
return 'dropTriggerStmt'
def help_create_materialized_view(self):
return 'createMVStmt'
def help_alter_materialized_view(self):
return 'alterMVStmt'
def help_drop_materialized_view(self):
return 'dropMVStmt'
def help_keywords(self):
return 'appendixA'
def help_create_user(self):
return 'createUserStmt'
def help_alter_user(self):
return 'alterUserStmt'
def help_drop_user(self):
return 'dropUserStmt'
def help_list_users(self):
return 'listUsersStmt'
def help_create_role(self):
return 'createRoleStmt'
def help_drop_role(self):
return 'dropRoleStmt'
def help_list_roles(self):
return 'listRolesStmt'
def help_permissions(self):
return 'permissions'
def help_list_permissions(self):
return 'listPermissionsStmt'
def help_grant(self):
return 'grantRoleStmt'
def help_revoke(self):
return 'revokeRoleStmt'
def get_html_anchor(topic):
return html_help_topics[topic]

View File

@ -26,6 +26,7 @@ def get_extensions():
from Cython.Build import cythonize
return cythonize("cqlshlib/copyutil.py")
setup(
name="cassandra-pylib",
description="Cassandra Python Libraries",