Return-Path: X-Original-To: apmail-cassandra-commits-archive@www.apache.org Delivered-To: apmail-cassandra-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 9191FDA8C for ; Thu, 4 Oct 2012 15:08:54 +0000 (UTC) Received: (qmail 8510 invoked by uid 500); 4 Oct 2012 15:08:54 -0000 Delivered-To: apmail-cassandra-commits-archive@cassandra.apache.org Received: (qmail 8484 invoked by uid 500); 4 Oct 2012 15:08:54 -0000 Mailing-List: contact commits-help@cassandra.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@cassandra.apache.org Delivered-To: mailing list commits@cassandra.apache.org Received: (qmail 8476 invoked by uid 99); 4 Oct 2012 15:08:54 -0000 Received: from tyr.zones.apache.org (HELO tyr.zones.apache.org) (140.211.11.114) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 04 Oct 2012 15:08:54 +0000 Received: by tyr.zones.apache.org (Postfix, from userid 65534) id 2ED413A0FC; Thu, 4 Oct 2012 15:08:54 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: brandonwilliams@apache.org To: commits@cassandra.apache.org X-Mailer: ASF-Git Admin Mailer Subject: git commit: cqlsh: add thrift transport factory Patch by Aleksey Yeschenko, reviewed by brandonwilliams for CASSANDRA-4610 Message-Id: <20121004150854.2ED413A0FC@tyr.zones.apache.org> Date: Thu, 4 Oct 2012 15:08:54 +0000 (UTC) Updated Branches: refs/heads/cassandra-1.1 eff4b6866 -> 3f31642c3 cqlsh: add thrift transport factory Patch by Aleksey Yeschenko, reviewed by brandonwilliams for CASSANDRA-4610 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/3f31642c Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/3f31642c Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/3f31642c Branch: refs/heads/cassandra-1.1 Commit: 3f31642c39b458ee221e2e1194f3f550555c7688 Parents: eff4b68 Author: Brandon Williams Authored: Thu Oct 4 09:45:29 2012 -0500 Committer: Brandon Williams Committed: Thu Oct 4 10:08:35 2012 -0500 ---------------------------------------------------------------------- bin/cqlsh | 43 ++++++++++++++++++++++------ lib/cql-internal-only-1.0.10-4610.zip | Bin 0 -> 70392 bytes lib/cql-internal-only-1.0.10.zip | Bin 68142 -> 0 bytes pylib/cqlshlib/tfactory.py | 32 ++++++++++++++++++++ 4 files changed, 66 insertions(+), 9 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/3f31642c/bin/cqlsh ---------------------------------------------------------------------- diff --git a/bin/cqlsh b/bin/cqlsh index f984618..c242cf9 100755 --- a/bin/cqlsh +++ b/bin/cqlsh @@ -32,7 +32,7 @@ exit 1 from __future__ import with_statement description = "CQL Shell for Apache Cassandra" -version = "2.2.0" +version = "2.3.0" from StringIO import StringIO from itertools import groupby @@ -112,6 +112,7 @@ HISTORY = os.path.expanduser(os.path.join('~', '.cqlsh_history')) DEFAULT_HOST = 'localhost' DEFAULT_PORT = 9160 DEFAULT_CQLVER = '2' +DEFAULT_TRANSPORT_FACTORY = 'cqlshlib.tfactory.regular_transport_factory' 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 @@ -128,8 +129,9 @@ parser.add_option("--no-color", action='store_false', dest='color', parser.add_option("-u", "--username", help="Authenticate as user.") parser.add_option("-p", "--password", help="Authenticate using password.") parser.add_option('-k', '--keyspace', help='Authenticate to the given keyspace.') -parser.add_option("-f", "--file", - help="Execute commands from FILE, then exit") +parser.add_option("-f", "--file", help="Execute commands from FILE, then exit") +parser.add_option("-t", "--transport-factory", + help="Use the provided Thrift transport factory function.") parser.add_option('--debug', action='store_true', help='Show additional debugging information') parser.add_option('--cqlversion', default=DEFAULT_CQLVER, @@ -557,19 +559,22 @@ class Shell(cmd.Cmd): csv_dialect_defaults = dict(delimiter=',', doublequote=False, escapechar='\\', quotechar='"') - def __init__(self, hostname, port, color=False, username=None, - password=None, encoding=None, stdin=None, tty=True, + 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): cmd.Cmd.__init__(self, completekey=completekey) self.hostname = hostname self.port = port + self.transport_factory = transport_factory self.username = username self.password = password self.keyspace = keyspace if use_conn is not None: self.conn = use_conn else: - self.conn = cql.connect(hostname, port, user=username, password=password) + transport = transport_factory(hostname, port, os.environ, CONFIG_FILE) + self.conn = cql.connect(hostname, port, user=username, password=password, + transport=transport) self.set_expanded_cql_version(cqlver) # we could set the keyspace through cql.connect(), but as of 1.0.10, # it doesn't quote the keyspace for USE :( @@ -1794,9 +1799,9 @@ class Shell(cmd.Cmd): except IOError, e: self.printerr('Could not open %r: %s' % (fname, e)) return - subshell = Shell(self.hostname, self.port, color=self.color, - encoding=self.encoding, stdin=f, tty=False, - use_conn=self.conn, cqlver=self.cql_version) + 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) subshell.cmdloop() f.close() @@ -2627,6 +2632,21 @@ def should_use_color(): pass return True +def load_factory(name): + """ + Attempts to load a transport factory function given its fully qualified + name, e.g. "cqlshlib.tfactory.regular_transport_factory" + """ + parts = name.split('.') + module = ".".join(parts[:-1]) + try: + t = __import__(module) + for part in parts[1:]: + t = getattr(t, part) + return t + except (ImportError, AttributeError): + sys.exit("Can't locate transport factory function %s" % name) + def read_options(cmdlineargs, environment): configs = ConfigParser.SafeConfigParser() configs.read(CONFIG_FILE) @@ -2635,6 +2655,8 @@ def read_options(cmdlineargs, environment): optvalues.username = option_with_default(configs.get, 'authentication', 'username') optvalues.password = option_with_default(configs.get, 'authentication', 'password') optvalues.keyspace = option_with_default(configs.get, 'authentication', 'keyspace') + optvalues.transport_factory = option_with_default(configs.get, 'connection', 'factory', + DEFAULT_TRANSPORT_FACTORY) optvalues.completekey = option_with_default(configs.get, 'ui', 'completekey', 'tab') optvalues.color = option_with_default(configs.getboolean, 'ui', 'color') optvalues.debug = False @@ -2658,6 +2680,8 @@ def read_options(cmdlineargs, environment): if options.file is not None: options.tty = False + options.transport_factory = load_factory(options.transport_factory) + if optvalues.color in (True, False): options.color = optvalues.color else: @@ -2725,6 +2749,7 @@ def main(options, hostname, port): try: shell = Shell(hostname, port, + options.transport_factory, color=options.color, username=options.username, password=options.password, http://git-wip-us.apache.org/repos/asf/cassandra/blob/3f31642c/lib/cql-internal-only-1.0.10-4610.zip ---------------------------------------------------------------------- diff --git a/lib/cql-internal-only-1.0.10-4610.zip b/lib/cql-internal-only-1.0.10-4610.zip new file mode 100644 index 0000000..c98101d Binary files /dev/null and b/lib/cql-internal-only-1.0.10-4610.zip differ http://git-wip-us.apache.org/repos/asf/cassandra/blob/3f31642c/lib/cql-internal-only-1.0.10.zip ---------------------------------------------------------------------- diff --git a/lib/cql-internal-only-1.0.10.zip b/lib/cql-internal-only-1.0.10.zip deleted file mode 100644 index c4ca8f2..0000000 Binary files a/lib/cql-internal-only-1.0.10.zip and /dev/null differ http://git-wip-us.apache.org/repos/asf/cassandra/blob/3f31642c/pylib/cqlshlib/tfactory.py ---------------------------------------------------------------------- diff --git a/pylib/cqlshlib/tfactory.py b/pylib/cqlshlib/tfactory.py new file mode 100644 index 0000000..d16c8e7 --- /dev/null +++ b/pylib/cqlshlib/tfactory.py @@ -0,0 +1,32 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from thrift.transport import TSocket, TTransport + +def regular_transport_factory(host, port, env, config_file): + """ + Basic unencrypted Thrift transport factory function. + Returns instantiated Thrift transport for use with cql.Connection. + + Params: + * host .........: hostname of Cassandra node. + * port .........: port number to connect to. + * env ..........: environment variables (os.environ) - not used by this implementation. + * config_file ..: path to cqlsh config file - not used by this implementation. + """ + socket = TSocket.TSocket(host, port) + socket.open() + return TTransport.TFramedTransport(socket)