/usr/lib/python3/dist-packages/reprounzip/main.py is in python3-reprounzip 1.0.10-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 | # Copyright (C) 2014-2017 New York University
# This file is part of ReproZip which is released under the Revised BSD License
# See file LICENSE for full license details.
"""Entry point for the reprounzip utility.
This contains :func:`~reprounzip.reprounzip.main`, which is the entry point
declared to setuptools. It is also callable directly.
It dispatchs to plugins registered through pkg_resources as entry point
``reprounzip.unpackers``.
"""
from __future__ import division, print_function, unicode_literals
if __name__ == '__main__': # noqa
from reprounzip.main import main
main()
import argparse
import locale
import logging
from pkg_resources import iter_entry_points
import sys
import traceback
from reprounzip.common import setup_logging, \
setup_usage_report, enable_usage_report, \
submit_usage_report, record_usage
from reprounzip import signals
from reprounzip.unpackers.common import UsageError
__version__ = '1.0.10'
unpackers = {}
def get_plugins(entry_point_name):
for entry_point in iter_entry_points(entry_point_name):
try:
func = entry_point.load()
except Exception:
print("Plugin %s from %s %s failed to initialize!" % (
entry_point.name,
entry_point.dist.project_name, entry_point.dist.version),
file=sys.stderr)
traceback.print_exc(file=sys.stderr)
continue
name = entry_point.name
# Docstring is used as description (used for detailed help)
descr = func.__doc__.strip()
# First line of docstring is the help (used for general help)
descr_1 = descr.split('\n', 1)[0]
yield name, func, descr, descr_1
class RPUZArgumentParser(argparse.ArgumentParser):
def error(self, message):
sys.stderr.write('error: %s\n' % message)
self.print_help(sys.stderr)
sys.exit(2)
def usage_report(args):
if bool(args.enable) == bool(args.disable):
logging.critical("What do you want to do?")
raise UsageError
enable_usage_report(args.enable)
sys.exit(0)
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 reprozip-users@vgc.poly.edu")
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)
|