我正在尝试将装饰器与Click框架一起使用,以执行多个命令共有的工作,而不在组的根元素中使用参数(有关原因,请参见https://github.com/pallets/click/issues/295)。简而言之,是这样的:
@click.group()
def main():
pass
@main.command()
@click.option('--argument-a')
@parse_config_file
@init_session
def do_something_in_session(argument_a, config, session):
# code
return
装饰器也有参数:
def init_session(f):
@wraps(f)
@click.option('--argument-B')
def wrapper(*args, **kwargs):
# do something with argument-B, and add session to list of arguments.
del kwargs['argument-B']
kwargs['session'] = session_created_above
return f(*args,**kwargs)
return wrapper
def parse_config_file(f):
@wraps(f)
@click.option('--argument-C')
def wrapper(*args, **kwargs):
# do something with argument-C, and add config to list of arguments.
del kwargs['argument-C']
kwargs['config'] = config_parsed_above
return f(*args,**kwargs)
return wrapper
但是,在运行do_something_in_session --help
时,仅显示函数定义上方的修饰符的参数(在本例中为@init_session
)。我有办法装饰装饰器,以便Click正确解析参数吗?