Pregunta

I tiene middleware WSGI que las necesidades para capturar el estado de HTTP (por ejemplo 200 OK) que las capas internas de retorno middleware llamando start_response. Actualmente estoy haciendo lo siguiente, pero abusar de una lista no parece ser la solución “correcta” para mí:

class TransactionalMiddlewareInterface(object):
    def __init__(self, application, **config):
        self.application = application
        self.config = config

    def __call__(self, environ, start_response):
        status = []

        def local_start(stat_str, headers=[]):
            status.append(int(stat_str.split(' ')[0]))
            return start_response(stat_str, headers)

        try:
            result = self.application(environ, local_start)

        finally:
            status = status[0] if status else 0

            if status > 199 and status 

La razón para el abuso de la lista es que no puedo asignar un nuevo valor al espacio de nombres de los padres dentro de una función completamente contenida.

¿Fue útil?

Solución

Se puede asignar la condición de un campo inyectada de la función local_start sí en lugar de utilizar la lista status. He utilizado algo similar, bien que funciona:

class TransactionalMiddlewareInterface(object):
    def __init__(self, application, **config):
        self.application = application
        self.config = config

    def __call__(self, environ, start_response):
        def local_start(stat_str, headers=[]):
            local_start.status = int(stat_str.split(' ')[0])
            return start_response(stat_str, headers)
        try:
            result = self.application(environ, local_start)
        finally:
            if local_start.status and local_start.status > 199:
                pass
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top