def common_options(*args, **kwargs):
"""
This is a multi-purpose decorator for applying a "base" set of options
shared by all commands.
It can be applied either directly, or given keyword arguments.
Usage:
>>> @common_options
>>> def mycommand(abc, xyz):
>>> ...
or
>>> @common_options(no_format_option=True)
>>> def mycommand(abc, xyz):
>>> ...
"""
def decorate(f, **kwargs):
"""
Work of actually decorating a function -- wrapped in here because we
want to dispatch depending on how `common_options` is invoked
"""
f = version_option(f)
f = debug_option(f)
f = verbose_option(f)
f = click.help_option('-h', '--help')(f)
# if the format option is being allowed, it needs to be applied to `f`
if not kwargs.get('no_format_option'):
f = format_option(f)
# if the --map-http-status option is being allowed, ...
if not kwargs.get('no_map_http_status_option'):
f = map_http_status_option(f)
return f
return detect_and_decorate(decorate, args, kwargs)
python类help_option()的实例源码
def extended_help_option(extended_help=None, *param_decls, **attrs):
"""
Based on the click.help_option code.
Adds a ``--extended-help`` option which immediately ends the program
printing out the extended extended-help page. Defaults to using the
callback's doc string, but can be given an explicit value as well.
This is intended for use as a decorator on a command to provide a 3rd level
of help verbosity suitable for use as a manpage (though not formatted as such explicitly).
Like :func:`version_option`, this is implemented as eager option that
prints in the callback and exits.
All arguments are forwarded to :func:`option`.
"""
def decorator(f):
def callback(ctx, param, value):
if value and not ctx.resilient_parsing:
if not extended_help:
ctx.command.help = ctx.command.callback.__doc__
click.echo(ctx.get_help(), color=ctx.color)
else:
ctx.command.help = extended_help
click.echo(ctx.get_help(), color=ctx.color)
ctx.exit()
attrs.setdefault('is_flag', True)
attrs.setdefault('expose_value', False)
attrs.setdefault('help', 'Show extended help content, similar to manpage, and exit.')
attrs.setdefault('is_eager', True)
attrs['callback'] = callback
return click.option(*(param_decls or ('--extended-help',)), **attrs)(f)
return decorator
def get_command(self, ctx, name):
ns = {}
fn = os.path.join(command_folder, name + '.py')
try:
with open(fn) as f:
code = compile(f.read(), fn, 'exec')
eval(code, ns, ns)
return ns[name]
except IOError:
click.help_option()
# base help message