iro/model/user.py
author Sandro Knauß <knauss@netzguerilla.net>
Mon, 30 Jan 2012 21:40:46 +0100
branchdevel
changeset 129 d6704178a18f
parent 125 19b3f383c9ce
child 263 52284710c0b4
permissions -rw-r--r--
renaming NotATelNumber -> InvalidTel

from twisted.internet import defer
from inspect import getcallargs
from decorator import decorator

from .schema import User
from .dbdefer import dbdefer

from ..validate import validate, vHash
from ..error import UserNotFound, InterfaceException


@validate(kwd="apikey", func=vHash, minlength=15, maxlength=15)
@dbdefer
def getuser(session, apikey):
    user = session.query(User).filter_by(apikey=apikey).first()
    if user is None:
        raise UserNotFound()
    else:
        return user

@decorator
def vUser(f,*args,**kargs):
    kp=getcallargs(f,*args,**kargs)
    try:
        apikey = kp["user"]
    except KeyError:
        raise InterfaceException() 
    
    def _gotResult(_user):
        kp["user"]=_user
        e =  defer.maybeDeferred(f,**kp)
        return e
    d = defer.maybeDeferred(getuser, apikey=apikey)
    return d.addCallback(_gotResult)