More PEP8 compliance for cqlsh patch by Michael Kjellman; reviewed by Jay Zhuang for CASSANDRA-14021
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/f8d73a3a Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/f8d73a3a Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/f8d73a3a Branch: refs/heads/trunk Commit: f8d73a3acb00d807d09aa33e1612c89389b18480 Parents: d4fd82b Author: Michael Kjellman <kjell...@apple.com> Authored: Tue Nov 14 20:51:37 2017 -0800 Committer: Jason Brown <jasedbr...@gmail.com> Committed: Mon Jan 15 05:56:44 2018 -0800 ---------------------------------------------------------------------- CHANGES.txt | 2 +- bin/cqlsh | 4 ++++ pylib/cqlshlib/copyutil.py | 6 +++--- pylib/cqlshlib/cql3handling.py | 20 ++++++++++++++++++++ pylib/cqlshlib/displaying.py | 1 + pylib/cqlshlib/formatting.py | 13 +++++++++++++ pylib/cqlshlib/pylexotron.py | 1 + pylib/cqlshlib/wcwidth.py | 3 +++ 8 files changed, 46 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/f8d73a3a/CHANGES.txt ---------------------------------------------------------------------- diff --git a/CHANGES.txt b/CHANGES.txt index b4e6f75..6e1ca85 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,5 +1,5 @@ 2.1.20 - * + * More PEP8 compliance for cqlsh (CASSANDRA-14021) 2.1.19 * Add storage port options to sstableloader (CASSANDRA-13844) http://git-wip-us.apache.org/repos/asf/cassandra/blob/f8d73a3a/bin/cqlsh ---------------------------------------------------------------------- diff --git a/bin/cqlsh b/bin/cqlsh index 6317ec9..30840db 100755 --- a/bin/cqlsh +++ b/bin/cqlsh @@ -83,6 +83,7 @@ def find_zip(libprefix): if zips: return max(zips) # probably the highest version, if multiple + cql_zip = find_zip(CQL_LIB_PREFIX) if cql_zip: ver = os.path.splitext(os.path.basename(cql_zip))[0][len(CQL_LIB_PREFIX):] @@ -522,6 +523,8 @@ def show_warning_without_quoting_line(message, category, filename, lineno, file= file.write(warnings.formatwarning(message, category, filename, lineno, line='')) except IOError: pass + + warnings.showwarning = show_warning_without_quoting_line warnings.filterwarnings('always', category=cql3handling.UnexpectedTableStructure) @@ -2213,6 +2216,7 @@ def main(options, hostname, port): if batch_mode and shell.statement_error: sys.exit(2) + # always call this regardless of module name: when a sub-process is spawned # on Windows then the module name is not __main__, see CASSANDRA-9304 insert_driver_hooks() http://git-wip-us.apache.org/repos/asf/cassandra/blob/f8d73a3a/pylib/cqlshlib/copyutil.py ---------------------------------------------------------------------- diff --git a/pylib/cqlshlib/copyutil.py b/pylib/cqlshlib/copyutil.py index 3a45353..85e2678 100644 --- a/pylib/cqlshlib/copyutil.py +++ b/pylib/cqlshlib/copyutil.py @@ -191,7 +191,7 @@ class OneWayChannels(object): for ch in self.channels: try: ch.close() - except: + except Exception: pass @@ -1967,8 +1967,8 @@ class ImportConversion(object): pk_values = [] for i in partition_key_indexes: val = serialize(i, row[i]) - l = len(val) - pk_values.append(struct.pack(">H%dsB" % l, l, val, 0)) + length = len(val) + pk_values.append(struct.pack(">H%dsB" % length, length, val, 0)) return b"".join(pk_values) if len(partition_key_indexes) == 1: http://git-wip-us.apache.org/repos/asf/cassandra/blob/f8d73a3a/pylib/cqlshlib/cql3handling.py ---------------------------------------------------------------------- diff --git a/pylib/cqlshlib/cql3handling.py b/pylib/cqlshlib/cql3handling.py index 029e0c7..012e383 100644 --- a/pylib/cqlshlib/cql3handling.py +++ b/pylib/cqlshlib/cql3handling.py @@ -34,6 +34,7 @@ class UnexpectedTableStructure(UserWarning): def __str__(self): return 'Unexpected table structure; may not translate correctly to CQL. ' + self.msg + SYSTEM_KEYSPACES = ('system', 'system_traces', 'system_auth') NONALTERBALE_KEYSPACES = ('system') @@ -109,6 +110,7 @@ class Cql3ParsingRuleSet(CqlParsingRuleSet): cqlword = cqlword[1:-1].replace("''", "'") return cqlword + CqlRuleSet = Cql3ParsingRuleSet() # convenience for remainder of module @@ -306,6 +308,7 @@ def prop_equals_completer(ctxt, cass): return () return ['='] + completer_for('property', 'propeq')(prop_equals_completer) @@ -529,6 +532,7 @@ def ks_name_completer(ctxt, cass): def cf_ks_name_completer(ctxt, cass): return [maybe_escape_name(ks) + '.' for ks in cass.get_keyspace_names()] + completer_for('columnFamilyName', 'ksname')(cf_ks_name_completer) @@ -538,6 +542,7 @@ def cf_ks_dot_completer(ctxt, cass): return ['.'] return [] + completer_for('columnFamilyName', 'dot')(cf_ks_dot_completer) @@ -554,6 +559,7 @@ def cf_name_completer(ctxt, cass): raise return map(maybe_escape_name, cfnames) + completer_for('userTypeName', 'ksname')(cf_ks_name_completer) completer_for('userTypeName', 'dot')(cf_ks_dot_completer) @@ -606,6 +612,7 @@ def working_on_keyspace(ctxt): return True return False + syntax_rules += r''' <useStatement> ::= "USE" <keyspaceName> ; @@ -694,6 +701,7 @@ def select_relation_lhs_completer(ctxt, cass): def select_count_star_completer(ctxt, cass): return ['*'] + explain_completion('selector', 'colname') syntax_rules += r''' @@ -770,6 +778,7 @@ def insert_option_completer(ctxt, cass): opts.discard(opt.split()[0]) return opts + syntax_rules += r''' <updateStatement> ::= "UPDATE" cf=<columnFamilyName> ( "USING" [updateopt]=<usingOption> @@ -863,6 +872,7 @@ def update_indexbracket_completer(ctxt, cass): return ['['] return [] + syntax_rules += r''' <deleteStatement> ::= "DELETE" ( <deleteSelector> ( "," <deleteSelector> )* )? "FROM" cf=<columnFamilyName> @@ -890,6 +900,7 @@ def delete_delcol_completer(ctxt, cass): layout = get_table_meta(ctxt, cass) return map(maybe_escape_name, regular_column_names(layout)) + syntax_rules += r''' <batchStatement> ::= "BEGIN" ( "UNLOGGED" | "COUNTER" )? "BATCH" ( "USING" [batchopt]=<usingOption> @@ -912,6 +923,7 @@ def batch_opt_completer(ctxt, cass): opts.discard(opt.split()[0]) return opts + syntax_rules += r''' <truncateStatement> ::= "TRUNCATE" ("COLUMNFAMILY" | "TABLE")? cf=<columnFamilyName> ; @@ -931,6 +943,7 @@ def create_ks_wat_completer(ctxt, cass): return ['KEYSPACE'] return ['KEYSPACE', 'SCHEMA'] + syntax_rules += r''' <createColumnFamilyStatement> ::= "CREATE" wat=( "COLUMNFAMILY" | "TABLE" ) ("IF" "NOT" "EXISTS")? ( ks=<nonSystemKeyspaceName> dot="." )? cf=<cfOrKsName> @@ -979,6 +992,7 @@ def create_cf_wat_completer(ctxt, cass): return ['TABLE'] return ['TABLE', 'COLUMNFAMILY'] + explain_completion('createColumnFamilyStatement', 'cf', '<new_table_name>') explain_completion('compositeKeyCfSpec', 'newcolname', '<new_column_name>') @@ -1033,6 +1047,7 @@ def create_cf_composite_primary_key_comma_completer(ctxt, cass): return () return [','] + syntax_rules += r''' <idxName> ::= <identifier> @@ -1065,6 +1080,7 @@ def create_index_col_completer(ctxt, cass): colnames = [cd.name for cd in layout.columns.values() if not cd.index] return map(maybe_escape_name, colnames) + syntax_rules += r''' <dropKeyspaceStatement> ::= "DROP" "KEYSPACE" ("IF" "EXISTS")? ksname=<nonSystemKeyspaceName> ; @@ -1113,6 +1129,7 @@ def idx_ks_idx_name_completer(ctxt, cass): raise return map(maybe_escape_name, idxnames) + syntax_rules += r''' <alterTableStatement> ::= "ALTER" wat=( "COLUMNFAMILY" | "TABLE" ) cf=<columnFamilyName> <alterInstructions> @@ -1149,6 +1166,7 @@ def alter_type_field_completer(ctxt, cass): fields = [tuple[0] for tuple in layout] return map(maybe_escape_name, fields) + explain_completion('alterInstructions', 'newcol', '<new_column_name>') explain_completion('alterTypeInstructions', 'newcol', '<new_field_name>') @@ -1227,6 +1245,7 @@ def username_name_completer(ctxt, cass): session = cass.session return [maybe_quote(row.values()[0].replace("'", "''")) for row in session.execute("LIST USERS")] + syntax_rules += r''' <createTriggerStatement> ::= "CREATE" "TRIGGER" ( "IF" "NOT" "EXISTS" )? <cident> "ON" cf=<columnFamilyName> "USING" class=<stringLiteral> @@ -1251,6 +1270,7 @@ def alter_type_field_completer(ctxt, cass): names = get_trigger_names(ctxt, cass) return map(maybe_escape_name, names) + # END SYNTAX/COMPLETION RULE DEFINITIONS CqlRuleSet.append_rules(syntax_rules) http://git-wip-us.apache.org/repos/asf/cassandra/blob/f8d73a3a/pylib/cqlshlib/displaying.py ---------------------------------------------------------------------- diff --git a/pylib/cqlshlib/displaying.py b/pylib/cqlshlib/displaying.py index 7b260c2..09068ca 100644 --- a/pylib/cqlshlib/displaying.py +++ b/pylib/cqlshlib/displaying.py @@ -99,6 +99,7 @@ class FormattedValue: """ return self.coloredval + self._pad(width, fill) + DEFAULT_VALUE_COLORS = dict( default=YELLOW, text=YELLOW, http://git-wip-us.apache.org/repos/asf/cassandra/blob/f8d73a3a/pylib/cqlshlib/formatting.py ---------------------------------------------------------------------- diff --git a/pylib/cqlshlib/formatting.py b/pylib/cqlshlib/formatting.py index abb4896..eac1810 100644 --- a/pylib/cqlshlib/formatting.py +++ b/pylib/cqlshlib/formatting.py @@ -38,6 +38,7 @@ def _show_control_chars(match): txt = txt[1:-1] return txt + bits_to_turn_red_re = re.compile(r'\\([^uUx]|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{2}|U[0-9a-fA-F]{8})') @@ -49,6 +50,7 @@ def _make_turn_bits_red_f(color1, color2): return color1 + txt + color2 return _turn_bits_red + default_null_placeholder = 'null' default_time_format = '' default_float_precision = 3 @@ -101,6 +103,7 @@ def format_value_default(val, colormap, **_): bval = controlchars_re.sub(_show_control_chars, escapedval) return bval if colormap is NO_COLOR_MAP else color_text(bval, colormap) + # Mapping cql type base names ("int", "map", etc) to formatter functions, # making format_value a generic function _formatters = {} @@ -128,6 +131,8 @@ def formatter_for(typname): def format_value_blob(val, colormap, **_): bval = '0x' + binascii.hexlify(str(val)) return colorme(bval, colormap, 'blob') + + formatter_for('buffer')(format_value_blob) @@ -188,6 +193,7 @@ def format_floating_point_type(val, colormap, float_precision, decimal_sep=None, return colorme(bval, colormap, 'float') + formatter_for('float')(format_floating_point_type) @@ -196,6 +202,7 @@ def format_integer_type(val, colormap, thousands_sep=None, **_): bval = format_integer_with_thousands_sep(val, thousands_sep) if thousands_sep else str(val) return colorme(bval, colormap, 'int') + # We can get rid of this in cassandra-2.2 if sys.version_info >= (2, 7): def format_integer_with_thousands_sep(val, thousands_sep=','): @@ -221,6 +228,7 @@ def format_value_timestamp(val, colormap, time_format, quote=False, **_): bval = "'%s'" % bval return colorme(bval, colormap, 'timestamp') + formatter_for('datetime')(format_value_timestamp) @@ -241,6 +249,7 @@ def format_value_text(val, encoding, colormap, quote=False, **_): return bval if colormap is NO_COLOR_MAP else color_text(bval, colormap, wcwidth.wcswidth(bval.decode(encoding))) + # name alias formatter_for('unicode')(format_value_text) @@ -286,6 +295,8 @@ def format_value_set(val, encoding, colormap, time_format, float_precision, null return format_simple_collection(sorted(val), '{', '}', encoding, colormap, time_format, float_precision, nullval, decimal_sep, thousands_sep, boolean_styles) + + formatter_for('frozenset')(format_value_set) # This code is used by cqlsh (bundled driver version 2.7.2 using sortedset), # and the dtests, which use whichever driver on the machine, i.e. 3.0.0 (SortedSet) @@ -314,6 +325,8 @@ def format_value_map(val, encoding, colormap, time_format, float_precision, null + rb displaywidth = 4 * len(subs) + sum(k.displaywidth + v.displaywidth for (k, v) in subs) return FormattedValue(bval, coloredval, displaywidth) + + formatter_for('OrderedDict')(format_value_map) formatter_for('OrderedMap')(format_value_map) formatter_for('OrderedMapSerializedKey')(format_value_map) http://git-wip-us.apache.org/repos/asf/cassandra/blob/f8d73a3a/pylib/cqlshlib/pylexotron.py ---------------------------------------------------------------------- diff --git a/pylib/cqlshlib/pylexotron.py b/pylib/cqlshlib/pylexotron.py index 9cf0f4e..7b11eac 100644 --- a/pylib/cqlshlib/pylexotron.py +++ b/pylib/cqlshlib/pylexotron.py @@ -518,6 +518,7 @@ class ParsingRuleSet: pattern.match(ctxt, completions) return completions + import sys http://git-wip-us.apache.org/repos/asf/cassandra/blob/f8d73a3a/pylib/cqlshlib/wcwidth.py ---------------------------------------------------------------------- diff --git a/pylib/cqlshlib/wcwidth.py b/pylib/cqlshlib/wcwidth.py index bc55c31..985fd41 100644 --- a/pylib/cqlshlib/wcwidth.py +++ b/pylib/cqlshlib/wcwidth.py @@ -94,6 +94,7 @@ def bisearch(ucs, table): return 1 return 0 + # The following two functions define the column width of an ISO 10646 # character as follows: # @@ -178,6 +179,7 @@ combining = ( (0xE0100, 0xE01EF) ) + # sorted list of non-overlapping intervals of East Asian Ambiguous # characters, generated by "uniset +WIDTH-A -cat=Me -cat=Mn -cat=Cf c" ambiguous = ( @@ -321,6 +323,7 @@ def wcwidth_cjk(c): def wcswidth_cjk(s): return mk_wcswidth_cjk(map(ord, s)) + if __name__ == "__main__": samples = ( ('MUSIC SHARP SIGN', 1), --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org For additional commands, e-mail: commits-h...@cassandra.apache.org