diff --git a/exporter.py b/exporter.py index 2c810f3..fe9bb7e 100755 --- a/exporter.py +++ b/exporter.py @@ -9,77 +9,30 @@ import argparse import traceback -class ArgumentParser(argparse.ArgumentParser): - def __init__(self, \ - prog=None, \ - usage=None, \ - description=None, \ - epilog=None, \ - parents=[], \ - formatter_class=argparse.HelpFormatter, \ - prefix_chars='-', \ - fromfile_prefix_chars=None, \ - argument_default=None, \ - conflict_handler='error', \ - add_help=True): - self._parse_safe = False - super(ArgumentParser, self).__init__(prog=prog, \ - usage=usage, \ - description=description, \ - epilog=epilog, \ - parents=parents, \ - formatter_class=formatter_class, \ - prefix_chars=prefix_chars, \ - fromfile_prefix_chars=fromfile_prefix_chars, \ - argument_default=argument_default, \ - conflict_handler=conflict_handler, \ - add_help=add_help) - - def _get_action_from_name(self, name): - """Given a name, get the Action instance registered with this parser. - If only it were made available in the ArgumentError object. It is - passed as it's first arg... - """ - container = self._actions - if name is None: - return None - for action in container: - if '/'.join(action.option_strings) == name: - return action - elif action.metavar == name: - return action - elif action.dest == name: - return action - - def has_dest(self, name): - for a in self._actions: - if a.dest == name: - return True - return False - - def parse_args_safe(self, args=None, namespace=None): - print "parse safe" - self._parse_safe = True - ret = None - try: - ret = self.parse_args(args, namespace) - except: - print "AE: " + str(sys.exc_info()[1]) - ret = None - print "done" - self._parse_safe = False - return ret - - def error(self, message): - print "error" - if self._parse_safe: - exc = sys.exc_info()[1] - if exc: - exc.argument = self._get_action_from_name(exc.argument_name) - raise exc - else: - raise argparse.ArgumentError(None, message) - super(ArgumentParser, self).error(message) +def parse_args(args, inputs): + i = 0 + options = [a for a in args if "options" in a] + values = [a for a in args if "name" in a] + # find options, like --port, or -f + while i < len(args): + arg = args[i].strip() + if arg == "--": + # after --, we only have positional arguments + break + if len(arg) and arg[0] == "-" + for o in options: + if arg in o["options"]: + num_values = 1 + if "num_values" in o and o["num_values"] != "*": + num_values = int(o["num_values"]) + if i == len(args) - num_values: + print "Not enough values for " + arg + vals = [] + while num_values > 0: + i += 1 + vals.append(args[i]) + num_values -= 1 + i += 1 port = 7890