# HG changeset patch # User Sandro Knauß # Date 1327756964 -3600 # Node ID 2d685c3c10b25decda71cdf48630077f5171457b # Parent b55754aa4f96d0a70f6b29846803a3c51a5b5acc dbdefer now can handle session argument on different positions diff -r b55754aa4f96 -r 2d685c3c10b2 iro/model/dbdefer.py --- a/iro/model/dbdefer.py Sat Jan 28 13:02:07 2012 +0100 +++ b/iro/model/dbdefer.py Sat Jan 28 14:22:44 2012 +0100 @@ -13,12 +13,17 @@ def __call__(self, func): @runInDBPool - def wrapper(func,*args, **kwargs): + def wrapper(func,*a, **kw): + pos = argspec.args.index("session") + ab=list(a[:pos]) + ae=list(a[pos:]) with WithSession(self.engine, self.autocommit) as session: - return func(*args, session=session, **kwargs) + al = ab+[session]+ae + return func(*al, **kw) caller=func - args =[i for i in inspect.getargspec(caller)[0] if i != "session" ] + argspec = inspect.getargspec(caller) + args =[i for i in argspec.args if i != "session" ] sargs=", ".join(args) evaldict = caller.func_globals.copy() evaldict['_call_'] = func @@ -26,7 +31,7 @@ wrap = FunctionMaker.create( '%s(%s)' % (caller.__name__, sargs), 'return decorator(_call_, %s)' % sargs, - evaldict, undecorated=caller, __wrapped__=caller, + evaldict, defaults=argspec.defaults, undecorated=caller, __wrapped__=caller, doc=caller.__doc__, module=caller.__module__, addsource=True) return wrap