iro/model/user.py
branchdevel
changeset 115 323d06431100
parent 114 1ed072cc6793
child 117 351a02310dd8
equal deleted inserted replaced
114:1ed072cc6793 115:323d06431100
     1 from inspect import getcallargs
     1 from inspect import getcallargs
     2 from functools import wraps
     2 from decorator import decorator
     3 
     3 
     4 from .schema import User
     4 from .schema import User
     5 from .utils import DBDefer
     5 from .utils import DBDefer
     6 from ..validate import vuserhash, validate
     6 from ..validate import validate, vHash
     7 from ..error import UserNotFound, InterfaceException
     7 from ..error import UserNotFound, InterfaceException
     8 
     8 
     9 dbdefer=DBDefer(None)
     9 dbdefer=DBDefer(None)
    10 
    10 
    11 def setEngine(engine,autocommit=False): 
    11 def setEngine(engine,autocommit=False): 
    12     dbdefer.engine = engine
    12     dbdefer.engine = engine
    13     dbdefer.autocommit = autocommit
    13     dbdefer.autocommit = autocommit
    14 
    14 
       
    15 
    15 @dbdefer
    16 @dbdefer
    16 @validate(kwd="apikey", func=vuserhash)
    17 @validate(kwd="apikey", func=vHash, minlength=15, maxlength=15)
    17 def getuser(apikey, session):
    18 def getuser(apikey, session):
    18     user = session.query(User).filter_by(apikey=apikey).first()
    19     user = session.query(User).filter_by(apikey=apikey).first()
    19     if user is None:
    20     if user is None:
    20         raise UserNotFound()
    21         raise UserNotFound()
    21     else:
    22     else:
    22         return user
    23         return user
    23 
    24 
    24 def with_user(f):
    25 @decorator
    25     @wraps(f)
    26 def vUser(f,*args,**kargs):
    26     def wrapper(*args,**kargs):
    27     kp=getcallargs(f,*args,**kargs)
    27         kp=getcallargs(wrapper.original,*args,**kargs)
    28     try:
    28         try:
    29         apikey = kp["user"]
    29             apikey = kp["user"]
    30     except KeyError:
    30         except KeyError:
    31         raise InterfaceException() 
    31             raise InterfaceException() 
    32     
    32         
    33     def _gotResult(_user):
    33         def _gotResult(_user):
    34         kp["user"]=_user
    34             kp["user"]=_user
    35         return f(**kp)
    35             return f(**kp)
       
    36 
    36 
    37         d=getuser(apikey=apikey)
    37     d=getuser(apikey=apikey)
    38         return d.addCallback(_gotResult)
    38     return d.addCallback(_gotResult)
    39     try:
       
    40         wrapper.original=f.original
       
    41     except AttributeError:
       
    42         wrapper.original=f
       
    43     return wrapper
       
    44 
    39 
    45 
    40