18.4.1 wsgiref.util - WSGI 環境のユーティリティ

このモジュールは WSGI 環境で使う様々なユーティリティ関数を提供します。 WSGI 環境は PEP 333 で記述されているような HTTP リクエスト変数を含む 辞書です。全ての environ パラメタを取る関数は WSGI 準拠の 辞書を与えられることを期待しています;細かい仕様については PEP 333 を 参照してください。

guess_scheme( environ)
wsgi.url_scheme が "http" か "https" かについて、environ 辞書の HTTPS 環境変数を調べることでその推測を返します。 戻り値は文字列(string)です。

この関数は、CGI や FastCGI のような CGI に似たプロトコルをラップする ゲートウェイを作成する場合に便利です。典型的には、それらのプロトコルを 提供するサーバが SSL 経由でリクエストを受け取った場合には HTTPS 変数に 値 "1" "yes"、または "on" を持つでしょう。ですので、この関数はそのような値が 見つかった場合には "https" を返し、そうでなければ "http" を返します。

request_uri( environ [, include_query=1])
クエリ文字列をオプションで含むリクエスト URI 全体を、 PEP 333 の "URL 再構築(URL Reconstruction)" にあるアルゴリズムを使って返します。 include_query が false の場合、クエリ文字列は結果となる文字列には 含まれません。

application_uri( environ)
request_url に似ていて、PATH_INFOQUERY_STRING 変数は 無視されます。結果はリクエストによって指定されたアプリケーションオブジェクトの ベース URI です。

shift_path_info( environ)
PATH_INFO からSCRIPT_NAME まで一つの名前をシフトして その名前を返します。environ 辞書は変更されますPATH_INFOSCRIPT_NAME のオリジナルをそのまま残したい場合にはコピーを使ってください。

PATH_INFO にパスセグメントが何も残っていなければ、None が返されます。

典型的なこのルーチンの使い方はリクエスト URI のそれぞれの要素の処理で、 例えばパスを一連の辞書のキーとして取り扱う場合です。 このルーチンは、渡された環境を、ターゲット URL で示される別の WSGI アプリケーション の呼び出しに合うように調整します。 例えば、/foo に WSGI アプリケーションがあったとして、そして リクエスト URL パスが /foo/bar/baz で、/foo の WSGI アプリケーションが shift_path_info を呼んだ場合、これは "bar" 文字列を受け取り、 環境は /foo/bar の WSGI アプリケーションへの受け渡しに適するように 更新されます。つまり、SCRIPT_NAME/foo から /foo/bar に変わって、 PATH_INFO/bar/baz から /baz に変化するのです。

PATH_INFO が単に "/" の場合、このルーチンは空の文字列を返し、 SCRIPT_NAME の末尾にスラッシュを加えます、これはたとえ 空のパスセグメントが通常は無視され、そして SCRIPT_NAME は通常 スラッシュで終わる事が無かったとしてもです。これは意図的な振る舞いで、 このルーチンでオブジェクト巡回(object traversal) をした場合に /x で終わる URI と /x/ で終わるものを アプリケーションが識別できることを保証するためのものです。

setup_testing_defaults( environ)
テスト目的で、environ を自明なデフォルト値 (trivial defaults) で更新します。

このルーチンは WSGI に必要な様々なパラメタを追加し、それには HTTP_HOSTSERVER_NAMESERVER_PORTREQUEST_METHODSCRIPT_NAMEPATH_INFO、あとは PEP 333 で定義されている wsgi.* 変数群を含みます。これは デフォルト値のみを追加し、これらの変数の既存設定は一切置きかえません。

このルーチンは、ダミー環境をセットアップすることによって WSGI サーバと アプリケーションのユニットテストを容易にすることを意図しています。 これは実際の WSGI サーバやアプリケーションで使うべきではありません。 なぜならこのデータは偽物なのです!

上記の環境用関数に加えて、wsgiref.util モジュールも 以下のようなその他のユーティリティを提供します:

is_hop_by_hop( header_name)
'header_name' が RFC 2616 で定義されている HTTP/1.1 の "Hop-by-Hop" ヘッダの 場合に true を返します。

クラス FileWrapper( filelike [, blksize=8192])
ファイルライクオブジェクトをイテレータに変換するラッパです。 結果のオブジェクトは __getitem____iter__ 両方を サポートしますが、これは Python 2.1 と Jython の互換性のためです。 オブジェクトがイテレートされる間、オプションの blksize パラメタが くり返し filelike オブジェクトの read() メソッドに渡されて 受け渡す文字列を取得します。read() が空文字列を返した場合 イテレーションは終了して、再開されることはありません。

filelikeclose() メソッドがある場合、返されたオブジェクトも close() メソッドを持ち、これが呼ばれた場合には filelike オブジェクトの close() メソッドを呼び出します。

ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。