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