def run(command=None): parser = LazyArgumentParser("rez") parser.add_argument("-i", "--info", action=InfoAction, help="print information about rez and exit") parser.add_argument("-V", "--version", action="version", version="Rez %s" % __version__) # add args common to all subcommands... we add them both to the top parser, # AND to the subparsers, for two reasons: # 1) this allows us to do EITHER "rez --debug build" OR # "rez build --debug" # 2) this allows the flags to be used when using either "rez" or # "rez-build" - ie, this will work: "rez-build --debug" _add_common_args(parser) # add lazy subparsers subparser = parser.add_subparsers(dest='cmd', metavar='COMMAND') for subcommand in subcommands: module_name = "rez.cli.%s" % subcommand subparser.add_parser( subcommand, help='', # required so that it can be setup later setup_subparser=SetupRezSubParser(module_name)) # parse args, but split extras into groups separated by "--" all_args = ([command] + sys.argv[1:]) if command else sys.argv[1:] arg_groups = [[]] for arg in all_args: if arg == '--': arg_groups.append([]) continue arg_groups[-1].append(arg) opts = parser.parse_args(arg_groups[0]) if opts.debug or _env_var_true("REZ_DEBUG"): exc_type = None else: exc_type = RezError def run_cmd(): return opts.func(opts, opts.parser, arg_groups[1:]) if opts.profile: import cProfile cProfile.runctx("run_cmd()", globals(), locals(), filename=opts.profile) returncode = 0 else: try: returncode = run_cmd() except (NotImplementedError, RezSystemError) as e: import traceback raise Exception(traceback.format_exc()) except exc_type as e: print >> sys.stderr, "rez: %s: %s" % (e.__class__.__name__, str(e)) sys.exit(1) sys.exit(returncode or 0)
def setup_parser(): """Create and setup parser for given rez command line interface. Returns: LazyArgumentParser: Argument parser for rez command. """ parser = LazyArgumentParser("rez") parser.add_argument("-i", "--info", action=InfoAction, help="print information about rez and exit") parser.add_argument("-V", "--version", action="version", version="Rez %s" % __version__) # add args common to all subcommands... we add them both to the top parser, # AND to the subparsers, for two reasons: # 1) this allows us to do EITHER "rez --debug build" OR # "rez build --debug" # 2) this allows the flags to be used when using either "rez" or # "rez-build" - ie, this will work: "rez-build --debug" _add_common_args(parser) # add lazy subparsers subparser = parser.add_subparsers(dest='cmd', metavar='COMMAND') for subcommand in subcommands: module_name = "rez.cli.%s" % subcommand subparser.add_parser( subcommand, help='', # required so that it can be setup later setup_subparser=SetupRezSubParser(module_name)) return parser
def run(command=None): parser = LazyArgumentParser("rez") parser.add_argument("-i", "--info", action=InfoAction, help="print information about rez and exit") parser.add_argument("-V", "--version", action="version", version="Rez %s" % __version__) # add args common to all subcommands... we add them both to the top parser, # AND to the subparsers, for two reasons: # 1) this allows us to do EITHER "rez --debug build" OR # "rez build --debug" # 2) this allows the flags to be used when using either "rez" or # "rez-build" - ie, this will work: "rez-build --debug" _add_common_args(parser) # add lazy subparsers subparser = parser.add_subparsers(dest="cmd", metavar="COMMAND") for subcommand in subcommands: module_name = "rez.cli.%s" % subcommand subparser.add_parser( subcommand, help="", # required so that it can be setup later setup_subparser=SetupRezSubParser(module_name), ) # parse args, but split extras into groups separated by "--" all_args = ([command] + sys.argv[1:]) if command else sys.argv[1:] arg_groups = [[]] for arg in all_args: if arg == "--": arg_groups.append([]) continue arg_groups[-1].append(arg) opts = parser.parse_args(arg_groups[0]) if opts.debug or _env_var_true("REZ_DEBUG"): exc_type = None else: exc_type = RezError def run_cmd(): return opts.func(opts, opts.parser, arg_groups[1:]) if opts.profile: import cProfile cProfile.runctx("run_cmd()", globals(), locals(), filename=opts.profile) returncode = 0 else: try: returncode = run_cmd() except (NotImplementedError, RezSystemError) as e: import traceback raise Exception(traceback.format_exc()) except exc_type as e: print >> sys.stderr, "rez: %s: %s" % (e.__class__.__name__, str(e)) sys.exit(1) sys.exit(returncode or 0)
def run(command=None): sys.dont_write_bytecode = True parser = LazyArgumentParser("rez") parser.add_argument("-i", "--info", action=InfoAction, help="print information about rez and exit") parser.add_argument("-V", "--version", action="version", version="Rez %s" % __version__) # add args common to all subcommands... we add them both to the top parser, # AND to the subparsers, for two reasons: # 1) this allows us to do EITHER "rez --debug build" OR # "rez build --debug" # 2) this allows the flags to be used when using either "rez" or # "rez-build" - ie, this will work: "rez-build --debug" _add_common_args(parser) # add lazy subparsers subparser = parser.add_subparsers(dest='cmd', metavar='COMMAND') for subcommand in subcommands: module_name = "rez.cli.%s" % subcommand subparser.add_parser( subcommand, help='', # required so that it can be setup later setup_subparser=SetupRezSubParser(module_name)) # construct args list. Note that commands like 'rez-env foo' and # 'rez env foo' are equivalent if command: args = [command] + sys.argv[1:] elif len(sys.argv) > 1 and sys.argv[1] in subcommands: command = sys.argv[1] args = sys.argv[1:] else: args = sys.argv[1:] # parse args depending on subcommand behaviour if command: arg_mode = subcommands[command].get("arg_mode") else: arg_mode = None if arg_mode == "grouped": # args split into groups by '--' arg_groups = [[]] for arg in args: if arg == '--': arg_groups.append([]) continue arg_groups[-1].append(arg) opts = parser.parse_args(arg_groups[0]) extra_arg_groups = arg_groups[1:] elif arg_mode == "passthrough": # unknown args passed in first extra_arg_group opts, extra_args = parser.parse_known_args(args) extra_arg_groups = [extra_args] else: # native arg parsing opts = parser.parse_args(args) extra_arg_groups = [] if opts.debug or _env_var_true("REZ_DEBUG"): exc_type = None else: exc_type = RezError def run_cmd(): try: # python3 will not automatically handle cases where no sub parser # has been selected. In these cases func will not exist, and an # AttributeError will be raised. func = opts.func except AttributeError: parser.error("too few arguments.") else: return func(opts, opts.parser, extra_arg_groups) if opts.profile: import cProfile cProfile.runctx("run_cmd()", globals(), locals(), filename=opts.profile) returncode = 0 else: try: returncode = run_cmd() except (NotImplementedError, RezSystemError) as e: raise except exc_type as e: print_error("%s: %s" % (e.__class__.__name__, str(e))) sys.exit(1) sys.exit(returncode or 0)
def run(command=None): setup_logging() parser = LazyArgumentParser("rez") parser.add_argument("-i", "--info", action=InfoAction, help="print information about rez and exit") parser.add_argument("-V", "--version", action="version", version="Rez %s" % __version__) # add args common to all subcommands... we add them both to the top parser, # AND to the subparsers, for two reasons: # 1) this allows us to do EITHER "rez --debug build" OR # "rez build --debug" # 2) this allows the flags to be used when using either "rez" or # "rez-build" - ie, this will work: "rez-build --debug" _add_common_args(parser) # add lazy subparsers subparser = parser.add_subparsers(dest='cmd', metavar='COMMAND') for subcommand in subcommands: module_name = "rez.cli.%s" % subcommand subparser.add_parser( subcommand, help='', # required so that it can be setup later setup_subparser=SetupRezSubParser(module_name)) # construct args list. Note that commands like 'rez-env foo' and # 'rez env foo' are equivalent if command: args = [command] + sys.argv[1:] elif len(sys.argv) > 1 and sys.argv[1] in subcommands: command = sys.argv[1] args = sys.argv[1:] else: args = sys.argv[1:] # parse args depending on subcommand behaviour if command: arg_mode = subcommands[command].get("arg_mode") else: arg_mode = None if arg_mode == "grouped": # args split into groups by '--' arg_groups = [[]] for arg in args: if arg == '--': arg_groups.append([]) continue arg_groups[-1].append(arg) opts = parser.parse_args(arg_groups[0]) extra_arg_groups = arg_groups[1:] elif arg_mode == "passthrough": # unknown args passed in first extra_arg_group opts, extra_args = parser.parse_known_args(args) extra_arg_groups = [extra_args] else: # native arg parsing opts = parser.parse_args(args) extra_arg_groups = [] if opts.debug or _env_var_true("REZ_DEBUG"): exc_type = None else: exc_type = RezError def run_cmd(): return opts.func(opts, opts.parser, extra_arg_groups) if opts.profile: import cProfile cProfile.runctx("run_cmd()", globals(), locals(), filename=opts.profile) returncode = 0 else: try: returncode = run_cmd() except (NotImplementedError, RezSystemError) as e: raise except exc_type as e: print_error("%s: %s" % (e.__class__.__name__, str(e))) sys.exit(1) sys.exit(returncode or 0)