Colubrid

関西Workshop01で細江さんがライトニングトークしてくださるColubridを予習
http://wsgiarea.pocoo.org/colubrid/

基本はリクエストディスパッチャー。
そして、WSGI対応。
ディスパッチに特化しているだけあって、多彩なディスパッチ方法をサポートしている。
既存フレームワークと対比していくと、

  • 正規表現で関数(メソッド)に対応づけるDjango
  • 正規表現でクラス(メソッドはHTTP_METHODに対応)づけるweb.py型
  • オブジェクトプロパティをたどるcherrypy(TurboGears)型
  • その他、すべてのリクエストを1つのメソッドでうけるServletをフロントコントローラにするようなやつ

など。
思いつく限りのディスパッチ方法をサポートしている。

内部をチェックしてみると、
ディスパッチャーApplicationはコマンドオブジェクトのような使い方。
WSGIプロトコルの呼び出し可能オブジェクトがApplicationクラスとなっている。
つまりApplicationクラスのコンストラクタがそのままリクエスト処理に使われている。
Applicationオブジェクトは、__iter__を実装しているので、戻り値がlistライクオブジェクトというプロトコルにも従っている訳だ。

以前のエントリで書いたはてな認証APIWSGIミドルウェアと組み合わせると以下のようにWSGIアプリケーションを作成できる。

class MyApplication(colubrid.BaseApplication):
...

app = HatenaAuthHandler(apiKey, secret)(Application)

実際のWSGIサーバーは、アプリケーションとミドルウェアをそれぞれ受け取って良きに計らってくれる機能があるので、そっちを使うべきか。
しかし、こういったWSGIのシンプルさとミドルウェアを簡単に書ける柔軟さは、Pythonが持つエレガントな構造を最大限に利用しているといえるのではないかな。