Добавить промежуточное ПО, которое только изменяет заголовки HTTP (например, FirePython), довольно просто, но когда вы вызываете webapp.WSGIApplication (environment, start_response), он возвращает [''] вместо итерируемого с телом:
def __call__(self, environ, start_response):
...
response.wsgi_write(start_response)
return ['']
response.wsgi_write фактически отвечает за печать тела:
def wsgi_write(self, start_response):
...
write = start_response('%d %s' % self.__status, self.__wsgi_headers)
write(body)
self.out.close()
Это затрудняет модификацию тела с помощью промежуточного программного обеспечения WSGI. Обычно я бы просто сделал:
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()
Но это не работает, так как возвращаемое значение wrapped_app равно ['']. Как заставить промежуточное ПО Upperware работать в Google AppEngine? Какое дизайнерское решение привело к написанию ответа вместо его возврата?