--- 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