def cli(ctx, manager, output_format, stats, stop_on_error):
""" CLI for multi-package manager upgrades. """
level = logger.level
try:
level_to_name = logging._levelToName
# Fallback to pre-Python 3.4 internals.
except AttributeError:
level_to_name = logging._levelNames
level_name = level_to_name.get(level, level)
logger.debug('Verbosity set to {}.'.format(level_name))
# Print help screen and exit if no sub-commands provided.
if ctx.invoked_subcommand is None:
click.echo(ctx.get_help())
ctx.exit()
# Filters out the subset of managers selected by the user.
target_managers = [
m for mid, m in pool().items()
if mid in set(manager)] if manager else pool().values()
# Apply manager-level option to either raise on error or not.
for m in target_managers:
m.raise_on_error = stop_on_error
# Pre-filters inactive managers.
def keep_available(manager):
if manager.available:
return True
logger.warning('Skip unavailable {} manager.'.format(manager.id))
# Use an iterator to not trigger log messages for subcommands not using
# this variable.
active_managers = ifilter(keep_available, target_managers)
# Silence all log message for JSON rendering unless in debug mode.
rendering = RENDERING_MODES[output_format]
if rendering == 'json' and level_name != 'DEBUG':
logger.setLevel(logging.CRITICAL * 2)
# Load up global options to the context.
ctx.obj = {
'target_managers': target_managers,
'active_managers': active_managers,
'rendering': rendering,
'stats': stats}
评论列表
文章目录