| Index: build/android/pylib/utils/command_option_parser.py
|
| diff --git a/build/android/pylib/utils/command_option_parser.py b/build/android/pylib/utils/command_option_parser.py
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..636d7e188844368cfa8effcf9402d13c9249f209
|
| --- /dev/null
|
| +++ b/build/android/pylib/utils/command_option_parser.py
|
| @@ -0,0 +1,76 @@
|
| +# Copyright 2013 The Chromium Authors. All rights reserved.
|
| +# Use of this source code is governed by a BSD-style license that can be
|
| +# found in the LICENSE file.
|
| +
|
| +"""An option parser which handles the first arg as a command.
|
| +
|
| +Add other nice functionality such as printing a list of commands
|
| +and an example in usage.
|
| +"""
|
| +
|
| +import optparse
|
| +import sys
|
| +
|
| +
|
| +class CommandOptionParser(optparse.OptionParser):
|
| + """Wrapper class for OptionParser to help with listing commands."""
|
| +
|
| + def __init__(self, *args, **kwargs):
|
| + """Creates a CommandOptionParser.
|
| +
|
| + Args:
|
| + commands_dict: A dictionary mapping command strings to an object defining
|
| + - add_options_func: Adds options to the option parser
|
| + - run_command_func: Runs the command itself.
|
| + example: An example command.
|
| + everything else: Passed to optparse.OptionParser contructor.
|
| + """
|
| + self.commands_dict = kwargs.pop('commands_dict', [])
|
| + self.example = kwargs.pop('example', '')
|
| + if not 'usage' in kwargs:
|
| + kwargs['usage'] = 'Usage: %prog <command> [options]'
|
| + optparse.OptionParser.__init__(self, *args, **kwargs)
|
| +
|
| + #override
|
| + def get_usage(self):
|
| + normal_usage = optparse.OptionParser.get_usage(self)
|
| + command_list = self.get_command_list()
|
| + example = self.get_example()
|
| + return self.expand_prog_name(normal_usage + example + command_list)
|
| +
|
| + #override
|
| + def get_command_list(self):
|
| + if self.commands_dict.keys():
|
| + return '\nCommands:\n %s\n' % '\n '.join(
|
| + sorted(self.commands_dict.keys()))
|
| + return ''
|
| +
|
| + def get_example(self):
|
| + if self.example:
|
| + return '\nExample:\n %s\n' % self.example
|
| + return ''
|
| +
|
| +
|
| +def ParseAndExecute(option_parser, argv=None):
|
| + """Parses options/args from argv and runs the specified command.
|
| +
|
| + Args:
|
| + option_parser: A CommandOptionParser object.
|
| + argv: Command line arguments. If None, automatically draw from sys.argv.
|
| +
|
| + Returns:
|
| + An exit code.
|
| + """
|
| + if not argv:
|
| + argv = sys.argv
|
| +
|
| + if len(argv) < 2 or argv[1] not in option_parser.commands_dict:
|
| + # Parse args first, if this is '--help', optparse will print help and exit
|
| + option_parser.parse_args(argv)
|
| + option_parser.error('Invalid command.')
|
| +
|
| + command = argv[1]
|
| + option_parser.commands_dict[command].add_options_func(option_parser)
|
| + options, args = option_parser.parse_args(argv)
|
| + return option_parser.commands_dict[command].run_command_func(
|
| + command, options, args, option_parser)
|
|
|