TurboGears2を予習してみる。

以下の内容は、Subversionのtrunkから取得したコードで試しています。

http://svn.turbogears.org/trunk/INSTALL.txt を見ると、PylonsTurboGearsをそれぞれSuversionのtrunkからとってくるように書いてある。

    $ svn co http://pylonshq.com/svn/Pylons/trunk pylons
    $ svn co http://svn.turbogears.org/trunk tg2

and install TurboGears 2 in development mode::

    $ python ./pylons/setup.py develop
    $ python ./tg2/setup.py develop
    

でもこのままやるとPasteScriptでVersionConflictしますから。
Pylonsが0.9.6っていうバージョンで入るけど、tg2のcommandが、'Pylons==dev,<0.9.6' こんな指定の仕方。
直接Subversionから入れるとdevになるようなので、そっちの方法で。

    $ easy_install http://pylonshq.com/svn/Pylons/trunk pylons

さて、ベースのMVCフレームワークCherryPyからPylonsに移行することになるらしいTurboGears2.0。
quickstartはPasteScriptのコマンドになります。

$ paster quickstart tutorial

ez_setup がねーぞとエラーになります。orz
まあ、終盤でエラーになるし、プロジェクトディレクトリ内はそれなりなので、気にしないことにします。
とりあえずidentityオプションを有効にしときました。
が、modelsパッケージ内には特にそんなものは生成されていない模様。
paste のテンプレートを除いてもそれらしきテンプレートは見つからないので、まだ実装されていないのでしょう。

さて、フレームワークをまとめあげるメガフレームワークであるところのTurboGearsですが2.0になってどんなフレームワークの選択になったのでしょう。
paster tginfo で依存するモジュール一覧と現在インストールされているバージョンを確認できました。
requiresだけだと以下のようなもの。

* TurboGears2 2.0a1dev-r3239
* SQLAlchemy 0.3.7
* Genshi 0.4.2
* Pylons 0.9.6dev-r2126
* Mako 0.1.8
* nose 0.9.3
* decorator 2.0.1
* simplejson 1.7.1
* FormEncode 0.7.1
* PasteScript 1.3.5
* PasteDeploy 1.3.1
* Paste 1.4
* Beaker 0.7.4
* WebHelpers 0.3.1dev-r2064
* Routes 1.7
* Beaker 0.7.4
* PasteDeploy 1.3.1
* simplejson 1.7.1
* Routes 1.7

うむ。いかにもon Pylons
SQLAlchemyとGenshiは前評判どおりの内容。
FormEncodeは続投。
Pylonsがベースになったので、CherryPyが脱落。
って、Makoはrequiresなの?
ユニットテストはnoseになっていくのかなぁ
と、いろいろ思いをはせることはできますが、不思議なのはElixirがrequiresじゃない?
template内にはElixirの文字が見えるのだが...
まだ本採用ではないのかな。

じゃあ、動かしてみるか。

$ paster serve development.ini

PylonsTurboGearsもtrunk版なのが原因なのか、がんがんWarningが出る。
でも、とりあえず動いている。
デフォルトのトップページはTurboGearsを使っている人には、見慣れた画面。
さて、コントロールを追加してみるか。
controllers以下にそれぞれモジュールになっている。
pylonsと同じように、paster controllerでいいのだろうか。
root.pyを覗いてみると、RootControllerはTurboGearsControllerを継承している。
pasterのヘルプには、TurboGears2でコントローラー用のコマンドはないようなのだ。
とりあえず、Pylons的にコントローラーを作ってみると、BaseControllerを継承したものになった。
ところで、TurboGearsControllerって普通のとどう違うんだろう。
WSGIControllerを継承している。
出所はpylonsのcontrollers。
要するに、WSGI spec の__call__を実装したコントローラーのようだ。
BaseControllerもWSGIControllerを継承しているから正しい?
まあ、これはPylonsのまんまでやるってことかなー。
コントローラーはデフォルトのままにしておいて、ディスパッチャに設定してみる。
途中、Elixirインストールしてないせいでエラーになる。
templateに書くなら、requiresに入れてください。orz

この辺でやめとこう。