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]
