diff --git a/exporter.py b/exporter.py index 17061d7..2c810f3 100755 --- a/exporter.py +++ b/exporter.py @@ -7,8 +7,34 @@ import os import json 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 @@ -31,28 +57,59 @@ 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): - exc = sys.exc_info()[1] - if exc: - exc.argument = self._get_action_from_name(exc.argument_name) - raise exc + 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) port = 7890 job_parser = ArgumentParser(description="Specify an export job") -job_parser.add_argument("input_swf", nargs="?", help="location of a .swf file to export") +job_parser.add_argument("input_swf", help="location of a .swf file to export") job_parser.add_argument("-t", "--type", default=1, help="export type: 1=spritesheet, 3=skeletal", choices=[1,3]) -cmd_parser = ArgumentParser(description="Export .swf files, either from the command line or piped from stdin", parents=[job_parser], conflict_handler="resolve") -cmd_parser.add_argument("-p", "--port", default=port, help="port to use for the wrapper server", type=int) +desc = "Export .swf files, either from the command line or piped from stdin" +cmd_parser_base = ArgumentParser(description=desc) +cmd_parser_base.add_argument("-p", "--port", default=port, help="port to use for the wrapper server", type=int) -try: - cmd_args = cmd_parser.parse_args() -except argparse.ArgumentError, exc: - # only show cmd line errors for things *just* in the cmd_parser (we will parse other stuff later) - if cmd_parser.has_dest(exc.argument.dest) and not job_parser.has_dest(exc.argument.dest): - super(ArgumentParser, cmd_parser).error(exc.message) +cmd_parser_single = ArgumentParser(description=desc, parents=[cmd_parser_base, job_parser], conflict_handler="resolve") +cmd_parser_stdin = ArgumentParser(description=desc, parents=[cmd_parser_base], conflict_handler="resolve") +cmd_parser_stdin.add_argument("use_stdin", choices=["-"], help="parse export jobs from stdin") + +#args_single = cmd_parser_single.parse_args_safe() +args_stdin = cmd_parser_stdin.parse_args_safe() +#if args_single is None: +# #if args_stdin is None: +# # cmd_parser_single.print_usage() +# # cmd_parser_stdin.print_usage() +# # sys.exit(2) +# #else: +# # print "read from stdin" +# cmd_parser_single.print_usage() +# pass +#else: +# print "do single command: " + str(args_single) + +sys.exit(0) s = socket.socket() s.bind(("localhost", port))