import re
from ..model import User
from ..error import UserNotFound, InterfaceException, ValidateException
def rehash(hash):
if not re.match(r'^[a-f0-9]{15,}$', hash.lower()):
raise ValidateException()
return True
def validate(**kargs):
def v(f):
def new_f(*a,**k):
for i in kargs:
kargs[i](k[i])
return f(*a,**k)
new_f.__name__ = f.__name__
return new_f
return v
@validate(userhash=rehash)
def getuser(userhash, session):
user = session.query(User).filter_by(apikey=userhash).first()
if user is None:
raise UserNotFound()
else:
return user
def with_user(f):
def new_f(*args,**kargs):
args=list(args)
try:
userhash = kargs["apikey"]
del kargs["apikey"]
except KeyError:
try:
userhash = args[1]
del args[1]
except IndexError:
raise InterfaceException()
def _gotResult(_user):
kargs["user"]=_user
return f(*args,**kargs)
return getuser(userhash=userhash).addCallback(_gotResult)
new_f.__name__ = f.__name__
return new_f