kopia lustrzana https://dev.funkwhale.audio/funkwhale/funkwhale
66 wiersze
1.6 KiB
Python
66 wiersze
1.6 KiB
Python
import click
|
|
import functools
|
|
|
|
|
|
@click.group()
|
|
def cli():
|
|
pass
|
|
|
|
|
|
def confirm_action(f, id_var, message_template="Do you want to proceed?"):
|
|
@functools.wraps(f)
|
|
def action(*args, **kwargs):
|
|
if id_var:
|
|
id_value = kwargs[id_var]
|
|
message = message_template.format(len(id_value))
|
|
else:
|
|
message = message_template
|
|
if not kwargs.pop("no_input", False) and not click.confirm(message, abort=True):
|
|
return
|
|
|
|
return f(*args, **kwargs)
|
|
|
|
return action
|
|
|
|
|
|
def delete_command(
|
|
group,
|
|
id_var="id",
|
|
name="rm",
|
|
message_template="Do you want to delete {} objects? This action is irreversible.",
|
|
):
|
|
"""
|
|
Wrap a command to ensure it asks for confirmation before deletion, unless the --no-input
|
|
flag is provided
|
|
"""
|
|
|
|
def decorator(f):
|
|
decorated = click.option("--no-input", is_flag=True)(f)
|
|
decorated = confirm_action(
|
|
decorated, id_var=id_var, message_template=message_template
|
|
)
|
|
return group.command(name)(decorated)
|
|
|
|
return decorator
|
|
|
|
|
|
def update_command(
|
|
group,
|
|
id_var="id",
|
|
name="set",
|
|
message_template="Do you want to update {} objects? This action may have irreversible consequnces.",
|
|
):
|
|
"""
|
|
Wrap a command to ensure it asks for confirmation before deletion, unless the --no-input
|
|
flag is provided
|
|
"""
|
|
|
|
def decorator(f):
|
|
decorated = click.option("--no-input", is_flag=True)(f)
|
|
decorated = confirm_action(
|
|
decorated, id_var=id_var, message_template=message_template
|
|
)
|
|
return group.command(name)(decorated)
|
|
|
|
return decorator
|