J'ai un middleware WSGI qui doit capturer l'état HTTP (par exemple 200 OK
) que les couches internes du middleware retournent en appelant start_response
. Actuellement, je fais ce qui suit, mais en abusant d'une liste ne semble pas être la « bonne » solution pour moi:Quelle est la manière appropriée d'intercepter WSGI start_response?
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 raison de l'abus de liste est que je ne peux pas attribuer une nouvelle valeur à la l'espace de noms parent à partir d'une fonction entièrement contenue.
C'est une solution géniale! Je vous remercie. – amcgregor