Entries Tagged as 'code'

Python decorators

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]