L'ajout d'un middleware qui modifie uniquement les en-têtes HTTP (comme FirePython) est assez simple, mais lorsque vous appelez webapp.WSGIApplication (environ, start_response), il renvoie [ « »] au lieu d'un itérables avec le corps:Comment ajouter à AppEngine un middleware WSGI qui modifie le corps de la réponse
def __call__(self, environ, start_response):
...
response.wsgi_write(start_response)
return ['']
response.wsgi_write est en fait le responsable de l'impression du corps:
def wsgi_write(self, start_response):
...
write = start_response('%d %s' % self.__status, self.__wsgi_headers)
write(body)
self.out.close()
Cela rend difficile de modifier le corps par un middleware WSGI. En général, je voudrais juste faire:
class Upperware:
def __init__(self, app):
self.wrapped_app = app
def __call__(self, environ, start_response):
for data in self.wrapped_app(environ, start_response):
return data.upper()
Mais cela ne fonctionne pas, comme la valeur de retour de wrapped_app est [ « »]. Comment puis-je faire fonctionner le middleware d'Upperware dans Google App Engine? Quelle est la décision de conception qui a conduit à écrire la réponse au lieu de la renvoyer?
Merci pour la réponse. WRT le rapport de bug, fait http://code.google.com/p/googleappengine/issues/detail?id=4244 –