def ensure_executable_exists(name, get_executable):
"""Ensures that the private executable exists. If it doesn't, then
call get_executable, which must be a callable that installs
the executable.
"""
def decorator(f):
@click.pass_context
def new_func(ctx, *args, **kwargs):
"""
@type ctx: click.Context
"""
path = path_utils.executable_path(name)
if not os.path.exists(path):
echo_heading('Installing {}.'.format(name), marker='-', marker_color='magenta')
get_executable()
assert os.path.exists(path)
return ctx.invoke(f, *args, **kwargs)
return update_wrapper(new_func, f)
return decorator
评论列表
文章目录