Generate a -u option for Python Service-remote CLI utility

Summary: In case you want to hit an HTTP Thrift service

Reviewed By: peter

Test Plan: ServiceClient-remote -u http://dope.vip.facebook.com/intern/smc/smcserver.php getTierByName test


git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@665205 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/compiler/cpp/src/generate/t_py_generator.cc b/compiler/cpp/src/generate/t_py_generator.cc
index 0a2bcb4..a9e923e 100644
--- a/compiler/cpp/src/generate/t_py_generator.cc
+++ b/compiler/cpp/src/generate/t_py_generator.cc
@@ -750,8 +750,10 @@
     py_autogen_comment() << endl <<
     "import sys" << endl <<
     "import pprint" << endl <<
+    "from urlparse import urlparse" << endl <<
     "from thrift.transport import TTransport" << endl <<
     "from thrift.transport import TSocket" << endl <<
+    "from thrift.transport import THttpClient" << endl <<
     "from thrift.protocol import TBinaryProtocol" << endl <<
     endl;
 
@@ -763,7 +765,7 @@
   f_remote <<
     "if len(sys.argv) <= 1 or sys.argv[1] == '--help':" << endl <<
     "  print ''" << endl <<
-    "  print 'Usage: ' + sys.argv[0] + ' [-h host:port] [-f[ramed]] function [arg1 [arg2...]]'" << endl <<
+    "  print 'Usage: ' + sys.argv[0] + ' [-h host:port] [-u url] [-f[ramed]] function [arg1 [arg2...]]'" << endl <<
     "  print ''" << endl <<
     "  print 'Functions:'" << endl;
   for (f_iter = functions.begin(); f_iter != functions.end(); ++f_iter) {
@@ -794,14 +796,28 @@
     "pp = pprint.PrettyPrinter(indent = 2)" << endl <<
     "host = 'localhost'" << endl <<
     "port = 9090" << endl <<
+    "uri = ''" << endl <<
     "framed = False" << endl <<
+    "http = False" << endl <<
     "argi = 1" << endl <<
     endl <<
-    "if sys.argv[1] == '-h':" << endl <<
-    "  parts = sys.argv[2].split(':') " << endl <<
+    "if sys.argv[argi] == '-h':" << endl <<
+    "  parts = sys.argv[argi+1].split(':') " << endl <<
     "  host = parts[0]" << endl <<
     "  port = int(parts[1])" << endl <<
-    "  argi = 3" << endl <<
+    "  argi += 2" << endl <<
+    endl <<
+    "if sys.argv[argi] == '-u':" << endl <<
+    "  url = urlparse(sys.argv[argi+1])" << endl <<
+    "  parts = url[1].split(':') " << endl <<
+    "  host = parts[0]" << endl <<
+    "  if len(parts) > 1:" << endl <<
+    "    port = int(parts[1])" << endl <<
+    "  else:" << endl <<
+    "    port = 80" << endl <<
+    "  uri = url[2]" << endl <<
+    "  http = True" << endl <<
+    "  argi += 2" << endl <<
     endl <<
     "if sys.argv[argi] == '-f' or sys.argv[argi] == '-framed':" << endl <<
     "  framed = True" << endl <<
@@ -810,11 +826,14 @@
     "cmd = sys.argv[argi]" << endl <<
     "args = sys.argv[argi+1:]" << endl <<
     endl <<
-    "socket = TSocket.TSocket(host, port)" << endl <<
-    "if framed:" << endl <<
-    "  transport = TTransport.TFramedTransport(socket)" << endl <<
+    "if http:" << endl <<
+    "  transport = THttpClient.THttpClient(host, port, uri)" << endl <<
     "else:" << endl <<
-    "  transport = TTransport.TBufferedTransport(socket)" << endl <<
+    "  socket = TSocket.TSocket(host, port)" << endl <<
+    "  if framed:" << endl <<
+    "    transport = TTransport.TFramedTransport(socket)" << endl <<
+    "  else:" << endl <<
+    "    transport = TTransport.TBufferedTransport(socket)" << endl <<
     "protocol = TBinaryProtocol.TBinaryProtocol(transport)" << endl <<
     "client = " << service_name_ << ".Client(protocol)" << endl <<
     "transport.open()" << endl <<