HTTPヘッダー(FirePythonなど)のみを変更するミドルウェアを追加するのは簡単ですが、webapp.WSGIApplication(environ、start_response)を呼び出すと[ 「」]の代わりに、身体に反復可能:AppEngineにレスポンス本体を変更するWSGIミドルウェアを追加する方法
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の戻り値が['']であるためです。 Google App EngineでUpperwareミドルウェアを動作させるにはどうすればよいですか?応答を返すのではなく、応答を書くことにつながる設計上の決定は何ですか?私は、Webアプリケーションがこのように書かれていた理由として
class Upperware(object):
def __init__(self, app):
self.wrapped_app = app
def __call__(self, environ, start_response):
def my_start_response(status, response_headers, exc_info=None):
write = start_response(status, response_headers, exc_info)
def my_write(body_data):
# Do your middleware handling of writes here
body_data = body_data.upper()
write(body_data)
return my_write
return self.wrapped_app(environ, my_start_response)
:
返信いただきありがとうございます。バグレポートをWRTし、http://code.google.com/p/googleappengine/issues/detail?id=4244 –