装饰装饰器和Click python库

时间:2019-09-03 14:32:58

标签: python python-decorators python-click

我正在尝试将装饰器与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正确解析参数吗?

0 个答案:

没有答案
相关问题