[TurboGears] メソッド全体をトランザクションに含める@transactionデコレータ
環境
この記事の内容は、TurboGears 1.0.1, SQLite 3.3.5で確認しました。
@transactionデコレータ
- 作者: Mark Dangoor, Kevin Sayfan, Gigi Ramm
- 出版社/メーカー: Prentice Hall
- 発売日: 2006/11/07
- メディア: ペーパーバック
- クリック: 50回
- この商品を含むブログ (6件) を見る
使い方
以下のようにして使います。
@transaction(isolation_level="EXCLUSIVE") def foo(self): # ...
ソースコード
ソースコードは、以下の通りです。
from turbogears import decorator def transaction(isolation_level=""): def entangle(func): def transaction(func, *args, **kw): trans = proj.model.hub.threadingLocal.connection trans._obsolete = False trans._connection = trans._dbConnection.getConnection() trans._connection.isolation_level = isolation_level try: returnval = func(*args, **kw) proj.model.hub.commit() except Exception, e: proj.model.hub.rollback() raise return returnval return transaction return decorator.weak_signature_decorator(entangle)