« 03.11 Pylons with AuthKit eq TypeError | ココ | 03.17 Python2.5 on さくら は too slow »

2009年3月12日

Pylons with AuthKit ne TypeError  このエントリーを含むはてなブックマーク 

というわけで~。(ざこば師匠風に)

Python2.4では残念なことにExceptionクラスから派生させた新型クラスの例外がTypeErrorになってしまうのでどうしよう、ということで強制的に401エラー(Not authenticated)を返すdecoratorをつくってみることに。

from decorator import decorator

def httpExceptionCatcher(*args):
    def wrapper(func, *args, **kwargs):
        try:
            return func(*args, **kwargs)
        except TypeError, e:
            abort(401)

    return decorator(wrapper)

これだけ。

これを、

@httpExceptionCatcher()
@authorize(UserIn())
def actionName(self):
...

とすればTypeErrorを回避できる。ただし常に401エラーになるけど。ここでdecoratorのすごいのは、前回にA(B(func()))となるA, Bがdecoratorと書いたものの、絶対にfunc()が呼ばれるわけではないところ。decoratorの中でfunc()以外の別の処理に切り替えることができる。素晴らしい。

By ただ at 22:21 カテゴリー ; PinMarch Samples , プログラミングとか

« 03.11 Pylons with AuthKit eq TypeError | 03月の記事 | 03.17 Python2.5 on さくら は too slow »




トラックバック

このエントリーのトラックバックURL:
http://pinmarch.sakura.ne.jp/mt/mt-tb.cgi/1383