diff --git a/bin/cqlsh.py b/bin/cqlsh.py index 6b87d9fb6e..7435f005af 100644 --- a/bin/cqlsh.py +++ b/bin/cqlsh.py @@ -71,6 +71,7 @@ except ImportError: CQL_LIB_PREFIX = 'cassandra-driver-internal-only-' CASSANDRA_PATH = os.path.join(os.path.dirname(os.path.realpath(__file__)), '..') +CASSANDRA_CQL_HTML_FALLBACK = 'https://cassandra.apache.org/doc/cql3/CQL-3.0.html' # default location of local CQL.html if os.path.exists(CASSANDRA_PATH + '/doc/cql3/CQL.html'): @@ -81,7 +82,7 @@ elif os.path.exists('/usr/share/doc/cassandra/CQL.html'): CASSANDRA_CQL_HTML = 'file:///usr/share/doc/cassandra/CQL.html' else: # fallback to online version - CASSANDRA_CQL_HTML = 'https://cassandra.apache.org/doc/cql3/CQL-3.0.html' + CASSANDRA_CQL_HTML = CASSANDRA_CQL_HTML_FALLBACK # On Linux, the Python webbrowser module uses the 'xdg-open' executable # to open a file/URL. But that only works, if the current session has been @@ -93,7 +94,9 @@ else: # >>> webbrowser._tryorder # >>> webbrowser._browser # -if webbrowser._tryorder[0] == 'xdg-open' and os.environ.get('XDG_DATA_DIRS', '') == '': +if len(webbrowser._tryorder) == 0: + CASSANDRA_CQL_HTML = CASSANDRA_CQL_HTML_FALLBACK +elif webbrowser._tryorder[0] == 'xdg-open' and os.environ.get('XDG_DATA_DIRS', '') == '': # only on Linux (some OS with xdg-open) webbrowser._tryorder.remove('xdg-open') webbrowser._tryorder.append('xdg-open') @@ -2283,7 +2286,9 @@ class Shell(cmd.Cmd): urlpart = cqldocs.get_help_topic(t) if urlpart is not None: url = "%s#%s" % (CASSANDRA_CQL_HTML, urlpart) - if self.browser is not None: + if len(webbrowser._tryorder) == 0: + self.printerr("*** No browser to display CQL help. URL for help topic %s : %s" % (t, url)) + elif self.browser is not None: webbrowser.get(self.browser).open_new_tab(url) else: webbrowser.open_new_tab(url) diff --git a/pylib/cqlshlib/helptopics.py b/pylib/cqlshlib/helptopics.py index 347b17d99a..46cd1561e6 100644 --- a/pylib/cqlshlib/helptopics.py +++ b/pylib/cqlshlib/helptopics.py @@ -14,7 +14,6 @@ # See the License for the specific language governing permissions and # limitations under the License. -from .cql3handling import simple_cql_types class CQL3HelpTopics(object): def get_help_topics(self): @@ -71,8 +70,10 @@ class CQL3HelpTopics(object): def help_json(self): return 'json' + def help_select_json(self): return 'selectJson' + def help_insert_json(self): return 'insertJson' @@ -83,21 +84,27 @@ class CQL3HelpTopics(object): 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' @@ -106,34 +113,43 @@ class CQL3HelpTopics(object): 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' @@ -142,26 +158,33 @@ class CQL3HelpTopics(object): 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'