## 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_INFO` と `QUERY_STRING` 変数は 無視されます。結果はリクエストによって指定されたアプリケーションオブジェクトの ベース URI です。

`shift_path_info`( | environ)

  `PATH_INFO` から`SCRIPT_NAME` まで一つの名前をシフトして その名前を返します。environ 辞書は変更されます；`PATH_INFO` や `SCRIPT_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_HOST`、`SERVER_NAME`、`SERVER_PORT`、 `REQUEST_METHOD`、`SCRIPT_NAME`、`PATH_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()` が空文字列を返した場合 イテレーションは終了して、再開されることはありません。

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