iro/model/user.py
author Sandro Knauß <knauss@netzguerilla.net>
Thu, 26 Jan 2012 01:18:47 +0100
branchdevel
changeset 110 601fc908d9f1
parent 108 cadc01b2bdc0
child 111 8b493ab9c74f
permissions -rw-r--r--
exception handling for xmprpc better exception msg fpr velidate Exceptions

from inspect import getcallargs

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(userhash=vuserhash)
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):
        kp=getcallargs(f,*args,**kargs)
        try:
            userhash = kp["user"]
        except KeyError:
            raise InterfaceException() 
        
        def _gotResult(_user):
            kp["user"]=_user
            return f(**kp)
        return getuser(userhash).addCallback(_gotResult)

    new_f.__name__ = f.__name__
    return new_f