【发布时间】:2014-01-31 15:21:37
【问题描述】:
def raw_list(function):
@wraps(function)
def wrapper(args, producer_data):
print producer_data[2]
tenant, token, url = producer_data
body, status_code = do_request(url, token)
return function(args, producer_data)
return wrapper
@raw_list
def member_list(args, producer_data):
# in argparse, consumer or producer data can be used because
# consumer is aliased to producer.
uuid = args['uuid']
producer_data[2] = producer_data[2] + "/" + uuid + "/members"
我有几个函数可以获取 URL,对其进行变异,并使用 URL 进行 API 调用。出于这个原因,我为 API 调用部分制作了一个包装函数。因此,每个函数只需要修改 URL 并使用包装函数进行装饰。
但我遇到的问题是,变异的 URL 代码 producer_data[2] = producer_data[2] + "/" + uuid + "/members" 似乎在函数装饰器代码运行之后运行,而不是之前运行。因此,将使用原始 URL 而不是变异的 URL。
我怎样才能修复这个逻辑流并使它到达使用变异 URL 进行 API 调用的位置?
【问题讨论】:
-
当然是事后运行,你事后在装饰器中调用!
-
为什么要存储
body和status_code,只是为了立即扔掉它们?它只是提醒do_request返回的内容吗? -
部分功能可能会用到
标签: python python-2.7 decorator python-decorators