Frage

Ich habe WSGI Middleware, die Bedürfnisse der HTTP-Status zu erfassen (z 200 OK), die inneren Schichten der Middleware Rückkehr von start_response aufrufen. Derzeit gibt es folgende ich tue, aber eine Liste missbrauchen scheint nicht die „richtige“ Lösung für mich zu sein:

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 

Der Grund für die Liste Missbrauch ist, dass ich nicht einen neuen Wert zu dem übergeordneten Namespace innerhalb einer vollständig enthaltenen Funktion zuweisen kann.

War es hilfreich?

Lösung

Sie können den Status als injizierten Bereich der local_start Funktion zuweisen selbst anstatt mit status Liste. Ich habe etwas ähnliches, funktioniert:

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top