2009年6月2日

uri-templatesを実装して、WSGIディスパッチャにしてみる

URI Template

意味を持ったURLを構築するときに、みんな同じテンプレ使うといいんじゃね?といったところか。
でもクールなURLとしては、クライアントにURLの構築をさせちゃいけないんじゃない?許されるのは、QueryStringくらいだったと思うけど。


まあでも、フレームワークを作るときに、こういった地味な標準は結構ありがたいかも。
逆操作として、URLとテンプレートを比較して値を抽出する方が実際には欲しいのだけど、そこは明示されていないようだ。
URL構築のテストケースはあるので、その逆をやればいいのだろうけど、listオペレータとか、パースをいつ区切るかってとこが難しい。


個人的には、単純な代入と、prefix,suffixがあればいいので、他のオペレーションは適当に実装をしてみた。
一応値抽出もできるように頑張った。


使い方


router = uritemplates.Router()
router.append('users', uritemplates.UriTemplate('users/{user_id}'))
router.url_for('controll', controller='a', action='index')


wsgiミドルウェアにしてみた(こっちが本当の目的)

router.append('users', uritemplates.UriTemplate('users/{user_id}'))
router.append('default', uritemplates.UriTemplate('{controller}{-prefix|/|action}{-prefix|/|id}'))
app = uritemplates.Middleware(app, router, None)

うーんRoutesかWerkzeugを使った方がいいかもしれないなぁ。