iro/model/user.py
author Sandro Knauß <knauss@netzguerilla.net>
Fri, 27 Jan 2012 15:01:59 +0100
branchdevel
changeset 114 1ed072cc6793
parent 111 8b493ab9c74f
child 115 323d06431100
permissions -rw-r--r--
reconstructing validate decorator

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