5

200 OKを呼び出してミドルウェアの内部層が返すHTTP ステータス (例: ) をキャプチャする必要がある WSGI ミドルウェアがありますstart_response。現在、私は次のことを行っていますが、リストを悪用することは私にとって「正しい」解決策ではないようです:

クラス TransactionalMiddlewareInterface(オブジェクト):
    def __init__(自己、アプリケーション、**構成):
        self.application = アプリケーション
        self.config = 構成

    def __call__(自己、環境、start_response):
        ステータス = []

        def local_start(stat_str, headers=[]):
            status.append(int(stat_str.split(' ')[0]))
            return start_response(stat_str, headers)

        試す:
            結果 = self.application(environ, local_start)

        最後に:
            status = status[0] if status else 0

            ステータス > 199 およびステータスの場合

リストの乱用の理由は、完全に含まれている関数内から親名前空間に新しい値を割り当てることができないためです。

4

2 に答える 2

4

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
于 2010-03-05T10:11:51.617 に答える