from inspect import getcallargs
from functools import wraps
from .schema import User
from .utils import DBDefer
from ..validate import vuserhash, validate
from ..error import UserNotFound, InterfaceException
dbdefer=DBDefer(None)
def setEngine(engine,autocommit=False):
dbdefer.engine = engine
dbdefer.autocommit = autocommit
@dbdefer
@validate(kwd="apikey", func=vuserhash)
def getuser(apikey, session):
user = session.query(User).filter_by(apikey=apikey).first()
if user is None:
raise UserNotFound()
else:
return user
def with_user(f):
@wraps(f)
def wrapper(*args,**kargs):
kp=getcallargs(wrapper.original,*args,**kargs)
try:
apikey = kp["user"]
except KeyError:
raise InterfaceException()
def _gotResult(_user):
kp["user"]=_user
return f(**kp)
d=getuser(apikey=apikey)
return d.addCallback(_gotResult)
try:
wrapper.original=f.original
except AttributeError:
wrapper.original=f
return wrapper