es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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
Tags:  , , , ,

Answer

  1. Avatar for 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 llamada CUSTOM_XRAY_WRAPPER.

    Aquí hay una implementación de ejemplo del decorador:

    def custom_xray_wrapper(func):
        if CUSTOM_XRAY_WRAPPER:
            @xray_recorder.capture()
            def wrapper(*args, **kwargs):
                val = func(*args, **kwargs)
                return val
            return wrapper
        else:
            return func
    

    En el código anterior, func es la función que se va a envolver. Si CUSTOM_XRAY_WRAPPER es True, el decorador aplica @xray_recorder.capture() a la función a través de la función wrapper, que se devuelve como la función envuelta. Si CUSTOM_XRAY_WRAPPER es False, el decorador simplemente devuelve la función original.

    Para usar el decorador, debes aplicarlo a una función de la siguiente manera:

    @custom_xray_wrapper
    def my_function():
        # Function code here
    

    Esto aplicará tu decorador custom_xray_wrapper personalizado a la función my_function y aplicará condicionalmente el decorador @xray_recorder.capture() según el valor deCUSTOM_XRAY_WRAPPER.

Comments are closed.