iro/controller/user.py
branchdevel
changeset 96 883b25b0b760
parent 93 ee10253258ad
equal deleted inserted replaced
94:4349f10d77a6 96:883b25b0b760
     1 import logging
       
     2 import re
     1 import re
     3 
     2 
     4 from .database import WithSession
       
     5 from ..model import User
     3 from ..model import User
     6 
     4 
     7 from ..error import UserNotFound, InterfaceException, ValidateException
     5 from ..error import UserNotFound, InterfaceException, ValidateException
     8 
     6 
     9 
     7 
    22         return new_f
    20         return new_f
    23     return v
    21     return v
    24             
    22             
    25 
    23 
    26 @validate(userhash=rehash)
    24 @validate(userhash=rehash)
    27 def getuser(userhash):
    25 def getuser(userhash, session):
    28     with WithSession() as session:
    26     user = session.query(User).filter_by(apikey=userhash).first()
    29         user = session.query(User).filter_by(apikey=userhash).first()
    27     if user is None:
    30         if user is None:
    28         raise UserNotFound()
    31             raise UserNotFound()
    29     else:
    32         else:
    30         return user
    33             return user
       
    34 
    31 
    35 def with_user(f):
    32 def with_user(f):
    36     def new_f(*args,**kargs):
    33     def new_f(*args,**kargs):
    37         args=list(args)
    34         args=list(args)
    38         logging.debug("Entering %s"%f.__name__)
       
    39         try:
    35         try:
    40             kargs["user"]=getuser(userhash = kargs["apikey"])
    36             userhash = kargs["apikey"]
    41             del kargs["apikey"]
    37             del kargs["apikey"]
    42         except KeyError:
    38         except KeyError:
    43             try:
    39             try:
    44                 kargs["user"]=getuser(userhash = args[1])
    40                 userhash = args[1]
       
    41                 del args[1]
    45             except IndexError:
    42             except IndexError:
    46                 raise InterfaceException() 
    43                 raise InterfaceException() 
    47             del args[1]
    44         
    48         ret=f(*args,**kargs)
    45         def _gotResult(_user):
    49         logging.debug("Exited %s"%f.__name__)
    46             kargs["user"]=_user
    50         return ret
    47             return f(*args,**kargs)
       
    48         return getuser(userhash=userhash).addCallback(_gotResult)
       
    49 
    51     new_f.__name__ = f.__name__
    50     new_f.__name__ = f.__name__
    52     return new_f
    51     return new_f
    53 
    52 
    54 
    53