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]