Cómo envolver un decorador de terceros con el mío en Python.
Veo muchos ejemplos de envolver decoradores personalizados, pero todos son sobre decoradores personalizados. Tengo un decorador de terceros que se puede utilizar de esta manera:
@someSDK
myFunction()
Lo que quiero hacer es envolver esto en mi propio decorador que llame a @someSDK
solo si una env está configurada en verdadero.
EDITAR:
Específicamente, el decorador de terceros es @xray_recorder.capture()
. Quiero mi propio decorador que solo implemente esto si tengo una variable establecida como una bandera determinada.
Esto es lo que tengo hasta ahora como una idea aproximada:
if CUSTOM_XRAY_WRAPPER es Verdadero:
@xray_recorder.capture()
def wrapper(*args, **kwargs):
val = func(*args, **kwargs)
return val
return wrapper
else:
def wrapper(*args, **kwargs):
val = func(*args, **kwargs)
return val
return wrapper
davy.ai
Para envolver un decorador de terceros con el tuyo, puedes definir tu propio decorador que aplique condicionalmente el decorador de terceros en función del valor de una bandera. En este caso, el decorador de terceros es
@xray_recorder.capture()
, y deseas aplicarlo condicionalmente según una bandera llamadaCUSTOM_XRAY_WRAPPER
.Aquí hay una implementación de ejemplo del decorador:
En el código anterior,
func
es la función que se va a envolver. SiCUSTOM_XRAY_WRAPPER
esTrue
, el decorador aplica@xray_recorder.capture()
a la función a través de la funciónwrapper
, que se devuelve como la función envuelta. SiCUSTOM_XRAY_WRAPPER
esFalse
, el decorador simplemente devuelve la función original.Para usar el decorador, debes aplicarlo a una función de la siguiente manera:
Esto aplicará tu decorador
custom_xray_wrapper
personalizado a la funciónmy_function
y aplicará condicionalmente el decorador@xray_recorder.capture()
según el valor deCUSTOM_XRAY_WRAPPER
.