【发布时间】:2016-02-14 22:53:00
【问题描述】:
我正在使用装饰器:deferred_set_context 将功能模块、名称和时间设置为上下文字符串(基本上需要此上下文来跟踪,以防有多次调用 register_request)
@deferred_set_context()
def register_request(self, machine_model):
def deferred_set_context(name=None):
def __outer__(func):
context_name = name
if not context_name:
context_name = func.__name__
@defer.inlineCallbacks
def __inner__(*args, **kwargs):
r = None
with base.this_context_if_no_context(base.Context('%s.%s.%s' % (func.__module__, context_name,
datetime.utcnow().strftime(
'%Y-%m-%dT%H:%M:%S.%f')))):
r = yield func(*args, **kwargs)
defer.returnValue(r)
return __inner__
return __outer__
现在我需要设置将 machine_model 名称(它是 register_request 的参数)传递给这个装饰器:register_request。像这样的:
@deferred_set_context(name=machine_model)
def register_request(self, machine_model):
我该怎么做?
【问题讨论】:
-
deferred_set_context似乎接受了一个参数name并返回一个名为__outer__的函数,但name似乎不是一个函数,因为它从未被调用,因此它不是一个装饰师。事实上,我什至不确定func来自哪里。 -
@Tommy
func是包装函数,在本例中为register_request。
标签: python python-3.x twisted python-decorators