iro/model/dbdefer.py
changeset 312 42fd5075a5d1
parent 294 0e75bd39767d
equal deleted inserted replaced
311:81916344c63b 312:42fd5075a5d1
    57                 with WithSession(self.engine, self.autocommit) as session:
    57                 with WithSession(self.engine, self.autocommit) as session:
    58                     al = ab + (session,) + ae
    58                     al = ab + (session,) + ae
    59                     return func(*al, **kw)
    59                     return func(*al, **kw)
    60 
    60 
    61         caller=func
    61         caller=func
    62         argspec = inspect.getargspec(caller)
    62         argspec = inspect.getfullargspec(caller)
    63         args =[i for i in argspec.args if i != "session" ]
    63         args =[i for i in argspec.args if i != "session" ]
    64         sargs=", ".join(args)       
    64         sargs=", ".join(args)
    65         if sargs:
    65         if sargs:
    66             sargs+=", session"
    66             sargs+=", session"
    67         else:
    67         else:
    68             sargs="session"
    68             sargs="session"
    69         defaults = argspec.defaults
    69         defaults = argspec.defaults
    70         if not defaults:
    70         if not defaults:
    71             defaults = (None,)
    71             defaults = (None,)
    72         else:
    72         else:
    73             defaults += (None,)
    73             defaults += (None,)
    74         evaldict = caller.func_globals.copy()
    74         evaldict = caller.__globals__.copy()
    75         evaldict['_call_'] = func
    75         evaldict['_call_'] = func
    76         evaldict['decorator'] = wrapper
    76         evaldict['decorator'] = wrapper
    77         wrap = FunctionMaker.create(
    77         wrap = FunctionMaker.create(
    78               '%s(%s)' % (caller.__name__, sargs), 
    78               '%s(%s)' % (caller.__name__, sargs), 
    79               'return decorator(_call_, %s)' % sargs,
    79               'return decorator(_call_, %s)' % sargs,