It seems you should move from db.transaction to the database. Make a method in the database by returning db.transaction
@staticmethod def gettransaction(): return db.transaction
then you overload it in child elements if necessary.
In the base you do
def methodB(cls): with cls.gettransaction(): bla ...
Here is a complete working example with a dummy transaction
class transact: def __enter__(a): print "enter" def __exit__(a,b,c,d): print "exit" class transact2: def __enter__(a): print "enter2" def __exit__(a,b,c,d): print "exit2" class Parent(): @staticmethod def gettrans(): return transact() def methodA(cl): with cl.gettrans(): print "A" class Child(Parent): pass @staticmethod def gettrans(): return transact2() p=Parent() p.methodA() c=Child() c.methodA()
it leads to
enter A exit enter2 A exit2
source share