11 self.autocommit=autocommit |
11 self.autocommit=autocommit |
12 self.engine = engine |
12 self.engine = engine |
13 |
13 |
14 def __call__(self, func): |
14 def __call__(self, func): |
15 @runInDBPool |
15 @runInDBPool |
16 def wrapper(func,*args, **kwargs): |
16 def wrapper(func,*a, **kw): |
|
17 pos = argspec.args.index("session") |
|
18 ab=list(a[:pos]) |
|
19 ae=list(a[pos:]) |
17 with WithSession(self.engine, self.autocommit) as session: |
20 with WithSession(self.engine, self.autocommit) as session: |
18 return func(*args, session=session, **kwargs) |
21 al = ab+[session]+ae |
|
22 return func(*al, **kw) |
19 |
23 |
20 caller=func |
24 caller=func |
21 args =[i for i in inspect.getargspec(caller)[0] if i != "session" ] |
25 argspec = inspect.getargspec(caller) |
|
26 args =[i for i in argspec.args if i != "session" ] |
22 sargs=", ".join(args) |
27 sargs=", ".join(args) |
23 evaldict = caller.func_globals.copy() |
28 evaldict = caller.func_globals.copy() |
24 evaldict['_call_'] = func |
29 evaldict['_call_'] = func |
25 evaldict['decorator'] = wrapper |
30 evaldict['decorator'] = wrapper |
26 wrap = FunctionMaker.create( |
31 wrap = FunctionMaker.create( |
27 '%s(%s)' % (caller.__name__, sargs), |
32 '%s(%s)' % (caller.__name__, sargs), |
28 'return decorator(_call_, %s)' % sargs, |
33 'return decorator(_call_, %s)' % sargs, |
29 evaldict, undecorated=caller, __wrapped__=caller, |
34 evaldict, defaults=argspec.defaults, undecorated=caller, __wrapped__=caller, |
30 doc=caller.__doc__, module=caller.__module__, addsource=True) |
35 doc=caller.__doc__, module=caller.__module__, addsource=True) |
31 return wrap |
36 return wrap |
32 |
37 |
33 dbdefer=DBDefer(None) |
38 dbdefer=DBDefer(None) |
34 |
39 |