장식

2017-11-20 13 views
0

장식 함수 인수를 전달하는 방법을 나는 <name> 대신에 내가 장식 기능에 이름을 전달하려면, 데코레이터에서장식

@newrelic.agent.data_store_trace('Mysql', '<name>',None) 
def get_user(request=None, name=settings.DEFAULT_NAME): 
    # Some implementation 

아래 코드가 있습니다.

newrelic이 패키지를 수시로 업데이트하므로 데코레이터를 수정/덮어 쓰고 싶지는 않습니다. 이는 우리에게 문제가 될 수 있습니다.

모든 솔루션 ???

답변

0

장식자는 단순히 래퍼 기능입니다.

newrelic.agent.data_store_trace을 래핑하고 다른 이름을 전달할 수있는 다른 래퍼 함수를 ​​작성하십시오. 간접 또 다른 수준이 줄 것이다 추가

import functools 


def data_store_trace(product, target, operation): 
    def wraps(fn): 
    @functools.wraps(fn) 
    def wrapped(*args, **kwargs): 
     print('Tracing: ', fn.__name__, args, kwargs) 
     return fn(*args, **kwargs) 
    return wrapped 
    return wraps 

:

말 새로운 유물은로 data_store_trace 정의

def data_store_trace_with_name(product, operation, target=''): 
    def wraps(fn): 
    @functools.wraps(fn) 
    def wrapped(*args, **kwargs): 
     return data_store_trace(product, target, operation)(fn)(*args, **kwargs) 
    return wrapped 
    return wraps 

@data_store_trace_with_name('Mysql', None, '<name>') 
def add(x, y): 
    return x + y 

add(5, 6)