def main(): """Entry point when called on the command-line. """ # Locale locale.setlocale(locale.LC_ALL, '') # Parses command-line # General options def add_options(opts): opts.add_argument('--version', action='version', version="reprounzip version %s" % __version__) # Loads plugins for name, func, descr, descr_1 in get_plugins('reprounzip.plugins'): func() parser = RPUZArgumentParser( description="reprounzip is the ReproZip component responsible for " "unpacking and reproducing an experiment previously " "packed with reprozip", epilog="Please report issues to [email protected]") add_options(parser) parser.add_argument('-v', '--verbose', action='count', default=1, dest='verbosity', help="augments verbosity level") subparsers = parser.add_subparsers(title="subcommands", metavar='') # usage_report subcommand parser_stats = subparsers.add_parser( 'usage_report', help="Enables or disables anonymous usage reports") add_options(parser_stats) parser_stats.add_argument('--enable', action='store_true') parser_stats.add_argument('--disable', action='store_true') parser_stats.set_defaults(func=usage_report) # Loads unpackers for name, func, descr, descr_1 in get_plugins('reprounzip.unpackers'): plugin_parser = subparsers.add_parser( name, help=descr_1, description=descr, formatter_class=argparse.RawDescriptionHelpFormatter) add_options(plugin_parser) info = func(plugin_parser) plugin_parser.set_defaults(selected_unpacker=name) if info is None: info = {} unpackers[name] = info signals.pre_parse_args(parser=parser, subparsers=subparsers) args = parser.parse_args() signals.post_parse_args(args=args) if getattr(args, 'func', None) is None: parser.print_help(sys.stderr) sys.exit(2) signals.unpacker = getattr(args, 'selected_unpacker', None) setup_logging('REPROUNZIP', args.verbosity) setup_usage_report('reprounzip', __version__) if hasattr(args, 'selected_unpacker'): record_usage(unpacker=args.selected_unpacker) signals.pre_setup.subscribe(lambda **kw: record_usage(setup=True)) signals.pre_run.subscribe(lambda **kw: record_usage(run=True)) try: try: args.func(args) except UsageError: raise except Exception as e: signals.application_finishing(reason=e) submit_usage_report(result=type(e).__name__) raise else: signals.application_finishing(reason=None) except UsageError: parser.print_help(sys.stderr) sys.exit(2) submit_usage_report(result='success') sys.exit(0)