iro/model/user.py
branchdevel
changeset 111 8b493ab9c74f
parent 108 cadc01b2bdc0
child 114 1ed072cc6793
equal deleted inserted replaced
110:601fc908d9f1 111:8b493ab9c74f
     2 
     2 
     3 from .schema import User
     3 from .schema import User
     4 from .utils import DBDefer
     4 from .utils import DBDefer
     5 from ..validate import vuserhash, validate
     5 from ..validate import vuserhash, validate
     6 from ..error import UserNotFound, InterfaceException
     6 from ..error import UserNotFound, InterfaceException
     7 
       
     8 
       
     9 dbdefer=DBDefer(None)
     7 dbdefer=DBDefer(None)
    10 
     8 
    11 def setEngine(engine,autocommit=False): 
     9 def setEngine(engine,autocommit=False): 
    12     dbdefer.engine = engine
    10     dbdefer.engine = engine
    13     dbdefer.autocommit = autocommit
    11     dbdefer.autocommit = autocommit
    14 
    12 
    15 @dbdefer
    13 @dbdefer
    16 @validate(userhash=vuserhash)
    14 @validate(apikey=vuserhash)
    17 def getuser(userhash, session):
    15 def getuser(apikey, session):
    18     user = session.query(User).filter_by(apikey=userhash).first()
    16     user = session.query(User).filter_by(apikey=apikey).first()
    19     if user is None:
    17     if user is None:
    20         raise UserNotFound()
    18         raise UserNotFound()
    21     else:
    19     else:
    22         return user
    20         return user
    23 
    21 
    24 def with_user(f):
    22 def with_user(f):
    25     def new_f(*args,**kargs):
    23     def new_f(*args,**kargs):
    26         kp=getcallargs(f,*args,**kargs)
    24         kp=getcallargs(f,*args,**kargs)
    27         try:
    25         try:
    28             userhash = kp["user"]
    26             apikey = kp["user"]
    29         except KeyError:
    27         except KeyError:
    30             raise InterfaceException() 
    28             raise InterfaceException() 
    31         
    29         
    32         def _gotResult(_user):
    30         def _gotResult(_user):
    33             kp["user"]=_user
    31             kp["user"]=_user
    34             return f(**kp)
    32             return f(**kp)
    35         return getuser(userhash).addCallback(_gotResult)
    33 
       
    34         d=getuser(apikey=apikey)
       
    35         return d.addCallback(_gotResult)
    36 
    36 
    37     new_f.__name__ = f.__name__
    37     new_f.__name__ = f.__name__
    38     return new_f
    38     return new_f
    39 
    39 
    40 
    40