cqlsh: allow configuration of value display formats Patch by Aleksey Yeschenko, reviewed by brandonwilliams for CASSANDRA-3756
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/c44af8c2 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/c44af8c2 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/c44af8c2 Branch: refs/heads/trunk Commit: c44af8c2c5c74b4f033bde5e445776122c4a3197 Parents: 0bdd152 Author: Brandon Williams <[email protected]> Authored: Tue Oct 9 10:06:46 2012 -0500 Committer: Brandon Williams <[email protected]> Committed: Tue Oct 9 10:06:46 2012 -0500 ---------------------------------------------------------------------- bin/cqlsh | 33 ++++++++++++++++++++++++++++----- 1 files changed, 28 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/c44af8c2/bin/cqlsh ---------------------------------------------------------------------- diff --git a/bin/cqlsh b/bin/cqlsh index 9fad4c6..729fcdc 100755 --- a/bin/cqlsh +++ b/bin/cqlsh @@ -117,6 +117,9 @@ DEFAULT_PORT = 9160 DEFAULT_CQLVER = '3' DEFAULT_TRANSPORT_FACTORY = 'cqlshlib.tfactory.regular_transport_factory' +DEFAULT_TIME_FORMAT = '%Y-%m-%d %H:%M:%S%z' +DEFAULT_FLOAT_PRECISION = 3 + epilog = """Connects to %(DEFAULT_HOST)s:%(DEFAULT_PORT)d by default. These defaults can be changed by setting $CQLSH_HOST and/or $CQLSH_PORT. When a host (and optional port number) are given on the command line, they take @@ -404,8 +407,6 @@ class Shell(cmd.Cmd): continue_prompt = " ... " keyspace_prompt = "cqlsh:%s> " keyspace_continue_prompt = "%s ... " - display_time_format = '%Y-%m-%d %H:%M:%S%z' - display_float_precision = 3 num_retries = 4 show_line_nums = False debug = False @@ -417,7 +418,9 @@ class Shell(cmd.Cmd): def __init__(self, hostname, port, transport_factory, color=False, username=None, password=None, encoding=None, stdin=None, tty=True, - completekey='tab', use_conn=None, cqlver=None, keyspace=None): + completekey='tab', use_conn=None, cqlver=None, keyspace=None, + display_time_format=DEFAULT_TIME_FORMAT, + display_float_precision=DEFAULT_FLOAT_PRECISION): cmd.Cmd.__init__(self, completekey=completekey) self.hostname = hostname self.port = port @@ -452,6 +455,8 @@ class Shell(cmd.Cmd): self.current_keyspace = keyspace self.color = color + self.display_time_format = display_time_format + self.display_float_precision = display_float_precision if encoding is None: encoding = locale.getpreferredencoding() self.encoding = encoding @@ -1745,7 +1750,9 @@ class Shell(cmd.Cmd): return subshell = Shell(self.hostname, self.port, self.transport_factory, color=self.color, encoding=self.encoding, stdin=f, - tty=False, use_conn=self.conn, cqlver=self.cql_version) + tty=False, use_conn=self.conn, cqlver=self.cql_version, + display_time_format=self.display_time_format, + display_float_precision=self.display_float_precision) subshell.cmdloop() f.close() @@ -2559,6 +2566,16 @@ def option_with_default(cparser_getter, section, option, default=None): except ConfigParser.Error: return default +def raw_option_with_default(configs, section, option, default=None): + """ + Same (almost) as option_with_default() but won't do any string interpolation. + Useful for config values that include '%' symbol, e.g. time format string. + """ + try: + return configs.get(section, option, raw=True) + except ConfigParser.Error: + return default + def should_use_color(): if not sys.stdout.isatty(): return False @@ -2603,6 +2620,10 @@ def read_options(cmdlineargs, environment): DEFAULT_TRANSPORT_FACTORY) optvalues.completekey = option_with_default(configs.get, 'ui', 'completekey', 'tab') optvalues.color = option_with_default(configs.getboolean, 'ui', 'color') + optvalues.time_format = raw_option_with_default(configs, 'ui', 'time_format', + DEFAULT_TIME_FORMAT) + optvalues.float_precision = option_with_default(configs.getint, 'ui', 'float_precision', + DEFAULT_FLOAT_PRECISION) optvalues.debug = False optvalues.file = None optvalues.tty = sys.stdin.isatty() @@ -2701,7 +2722,9 @@ def main(options, hostname, port): tty=options.tty, completekey=options.completekey, cqlver=options.cqlversion, - keyspace=options.keyspace) + keyspace=options.keyspace, + display_time_format=options.time_format, + display_float_precision=options.float_precision) except KeyboardInterrupt: sys.exit('Connection aborted.') except CQL_ERRORS, e:
