Navigation

home code debian images resume weblog wiki

Older news:

Feb 18, 2005:
Mixing whitespace
Jan 10, 2005:
The difference between dogs and cats
Dec 22, 2004:
Sunrise in winter
Dec 12, 2004:
New site layout
Winter in Rotterdam
Cyprus (November 2004)
Nov 26, 2004:
Python decorators

Browse:


Python decorators/programming

Posted on 2004-11-26 by ivo :: /programming :: link

As another example of what you could do with python 2.4 decorators, I tried to wrap class methods in a database transaction, and this is what it became:

def intransaction(method):
    def wraptransaction(self, *args, **kwargs):
        try:
            self.conn.beginTransaction()
            rv = method(self, *args, **kwargs)
        except:
            self.conn.rollbackTransaction()
            raise
        else:
            self.conn.commitTransaction()
        return rv
    return wraptransaction
class DatabaseInterface(object):
    def __init__(self, **kwargs):
        self.conn = DatabaseConnection(**kwargs)

    @intransaction
    def getSomething(self, id):
        return self.conn.select(id)[0]