pyramidでtweenを使って機能を追加してみる

tweenという機能を使って拡張することができる。

自分で新しいtweenを定義して追加するには以下の通りの作業をすれば良い。

1. tweenのfactoryを定義する。
2. configure.add_tweenに定義したfactoryを渡す。(この時文字列である必要があるe.g. "foo.bar.baz")
3. (tweenで有効/無効の分岐を追加している場合には所定の変数などを追加する)

sample

これは、requestを受け取ってからresponseを返すまでの経過時間を計るtweenを加えた場合のサンプル。
(ただし単なる文字列を返すmakoテンプレートを使ったviewが一つ定義されているだけ)

実行結果
$ python tween.py
serving on 0.0.0.0:8080 view at http://127.0.0.1:8080
INFO:tween:took 0.0158200263977 seconds
^CINFO:paste.httpserver.ThreadPool:Shutting down threadpool
INFO:paste.httpserver.ThreadPool:All workers stopped
INFO:paste.httpserver.ThreadPool:Shutting down threadpool
INFO:paste.httpserver.ThreadPool:All workers stopped

デフォルトの実行位置はコードのコメントの通り。

評価順序の変更

add_tweenに以下のようにover,underなどの引数を与えることで、評価順序を設定できる。

import pyramid.tweens

config.add_tween('myapp.tween_factory1',
                 over=pyramid.tweens.MAIN)
config.add_tween('myapp.tween_factory2',
                 over=pyramid.tweens.MAIN,
                 under='myapp.tween_factory1')

http://readthedocs.org/docs/pyramid/en/latest/narr/hooks.html#suggesting-implicit-tween-ordering