iro/controller/user.py
author Sandro Knauß <knauss@netzguerilla.net>
Thu, 22 Dec 2011 03:13:34 +0100
branchdevel
changeset 92 f479738b4879
child 93 ee10253258ad
permissions -rw-r--r--
umbau zu MVC

import logging
import re

from .database import WithSession
from model import User

from error import UserNotFound, InterfaceException, ValidateException



def rehash(hash):
    if not re.match(r'^[a-f0-9]{15,}$', hash.lower()):
        raise ValidateException()
    return True

def validate(**kargs):
    def v(f):
        def new_f(*a,**k):
            for i in kargs:
                kargs[i](k[i])
            return f(*a,**k)
        new_f.__name__ = f.__name__
        return new_f
    return v
            

@validate(userhash=rehash)
def getuser(userhash):
    with WithSession() as session:
        user = session.query(User).filter_by(apikey=userhash).first()
        if user is None:
            raise UserNotFound()
        else:
            return user

def with_user(f):
    def new_f(*args,**kargs):
        args=list(args)
        logging.debug("Entering %s"%f.__name__)
        try:
            kargs["user"]=getuser(userhash = kargs["apikey"])
            del kargs["apikey"]
        except KeyError:
            try:
                kargs["user"]=getuser(userhash = args[1])
            except IndexError:
                raise InterfaceException() 
            del args[1]
        ret=f(*args,**kargs)
        logging.debug("Exited %s"%f.__name__)
        return ret
    new_f.__name__ = f.__name__
    return new_f