Author: zturner Date: Wed Dec 2 13:00:52 2015 New Revision: 254533 URL: http://llvm.org/viewvc/llvm-project?rev=254533&view=rev Log: Use sub-commands instead of --mode={client,server}.
This is more pythonic and allows a more idiomatic way of getting detailed usage information for each individual sub-command. Modified: lldb/trunk/scripts/swig_bot.py lldb/trunk/scripts/swig_bot_lib/client.py lldb/trunk/scripts/swig_bot_lib/server.py Modified: lldb/trunk/scripts/swig_bot.py URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/scripts/swig_bot.py?rev=254533&r1=254532&r2=254533&view=diff ============================================================================== --- lldb/trunk/scripts/swig_bot.py (original) +++ lldb/trunk/scripts/swig_bot.py Wed Dec 2 13:00:52 2015 @@ -14,16 +14,27 @@ import traceback # LLDB modules import use_lldb_suite +# swig_bot modules +from swig_bot_lib import client +from swig_bot_lib import server + def process_args(args): parser = argparse.ArgumentParser( description='Run swig-bot client or server.') - # Arguments to control whether swig-bot runs as a client or server. - parser.add_argument( - "--mode", - required=True, - choices=["client", "server"], - help="Run swig_bot in either client or server mode.") + # Create and populate subparser arguments for when swig_bot is + # run in client or server mode + subparsers = parser.add_subparsers( + help="Pass --help to a sub-command to print detailed usage") + client_parser = subparsers.add_parser("client", + help="Run SWIG generation client") + client.add_subparser_args(client_parser) + client_parser.set_defaults(func=run_client) + + server_parser = subparsers.add_parser("server", + help="Run SWIG generation server") + server.add_subparser_args(server_parser) + server_parser.set_defaults(func=run_server) # Arguments to control logging verbosity. parser.add_argument( @@ -32,7 +43,7 @@ def process_args(args): default=False, help="Increase logging verbosity level.") - (options, remaining) = parser.parse_known_args(args) + options = parser.parse_args(args) # Set logging level. if options.verbose: log_level = logging.DEBUG @@ -41,22 +52,26 @@ def process_args(args): logging.basicConfig(level=log_level) logging.info("logging is using level: %d", log_level) - return (options, remaining) + return options + +def run_client(options): + logging.info("Running swig_bot in client mode") + client.finalize_subparser_options(options) + client.run(options) + +def run_server(options): + logging.info("Running swig_bot in server mode") + server.finalize_subparser_options(options) + server.run(options) if __name__ == "__main__": - (options, remaining) = process_args(sys.argv[1:]) + options = process_args(sys.argv[1:]) try: - if options.mode == "client": - logging.info("Running swig_bot in client mode") - from swig_bot_lib import client - client.run(remaining) - elif options.mode == "server": - logging.info("Running swig_bot in server mode") - from swig_bot_lib import server - server.run(remaining) - else: + if options.func is None: logging.error("Unknown mode specified. Expected client or server.") sys.exit(-1) + else: + options.func(options) except KeyboardInterrupt as e: logging.info("Ctrl+C received. Shutting down...") sys.exit(-1) Modified: lldb/trunk/scripts/swig_bot_lib/client.py URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/scripts/swig_bot_lib/client.py?rev=254533&r1=254532&r2=254533&view=diff ============================================================================== --- lldb/trunk/scripts/swig_bot_lib/client.py (original) +++ lldb/trunk/scripts/swig_bot_lib/client.py Wed Dec 2 13:00:52 2015 @@ -30,7 +30,7 @@ from . import remote default_ip = "127.0.0.1" default_port = 8537 -def process_args(args): +def add_subparser_args(parser): """Returns options processed from the provided command line. @param args the command line to process. @@ -75,10 +75,6 @@ def process_args(args): raise ValueError("Invalid connection string") setattr(namespace, self.dest, ip_port) - # Setup the parser arguments that are accepted. - parser = argparse.ArgumentParser( - description='Generate SWIG bindings.') - parser.add_argument( "--local", action=FindLocalSwigAction, @@ -112,9 +108,7 @@ def process_args(args): action="append", help="Specifies the language to generate bindings for") - # Process args. - options = parser.parse_args(args) - +def finalize_subparser_options(options): if options.languages is None: options.languages = ['python'] @@ -173,9 +167,7 @@ def handle_response(options, connection, finally: os.unlink(response_file_path) -def run(args): - options = process_args(args) - +def run(options): if options.remote is None: logging.info("swig bot client using local swig installation at '{}'" .format(options.swig_executable)) Modified: lldb/trunk/scripts/swig_bot_lib/server.py URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/scripts/swig_bot_lib/server.py?rev=254533&r1=254532&r2=254533&view=diff ============================================================================== --- lldb/trunk/scripts/swig_bot_lib/server.py (original) +++ lldb/trunk/scripts/swig_bot_lib/server.py Wed Dec 2 13:00:52 2015 @@ -33,10 +33,7 @@ from . import remote default_port = 8537 -def process_args(args): - # Setup the parser arguments that are accepted. - parser = argparse.ArgumentParser(description='SWIG generation server.') - +def add_subparser_args(parser): parser.add_argument( "--port", action="store", @@ -49,8 +46,8 @@ def process_args(args): default=fs.find_executable("swig"), dest="swig_executable") - # Process args. - return parser.parse_args(args) +def finalize_subparser_options(options): + pass def initialize_listening_socket(options): logging.debug("Creating socket...") @@ -134,8 +131,7 @@ def accept_loop(sock, options): logging.error("An error occurred while processing the connection.") logging.error(error) -def run(args): - options = process_args(args) +def run(options): print(options) sock = initialize_listening_socket(options) accept_loop(sock, options) _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits