Какой подходящий способ перехватить WSGI start_response?

StackOverflow https://stackoverflow.com/questions/2384908

Вопрос

У меня есть промежуточное программное обеспечение WSGI, которая должна захватить состояние HTTP (например, 200 OK) что внутренние слои промежуточного программного обеспечения, позвонив start_response. Отказ В настоящее время я выполняю следующее, но злоупотребление списком, похоже, не является «правильным» решением для меня:

Класс TransactionalMiddlewareInterface (объект): def __init __ (self, application, ** config): self.application = self.call.config = config def __call __ (self, Environ, start_response): Состояние = [] def local_start (stat_str, заголовки = [ ]. еще 0, если статус> 199 и статус 

Причина злоупотребления списком состоит в том, что я не могу назначить новое значение для романтового пространства имен в пределах полностью содержащейся функции.

Это было полезно?

Решение

Вы можете назначить статус в качестве инъекционного поля local_start функционировать, а не использовать status список. Я использовал что-то подобное, работает нормально:

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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top