iro/controller/user.py
author Sandro Knauß <knauss@netzguerilla.net>
Tue, 10 Jan 2012 06:07:25 +0100
branchdevel
changeset 95 3f41dfd7cb34
parent 93 ee10253258ad
child 96 883b25b0b760
permissions -rw-r--r--
ausformulieren des xmlrpc Testes
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
92
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     1
import logging
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     2
import re
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     3
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     4
from .database import WithSession
93
ee10253258ad now right relative imports
Sandro Knauß <knauss@netzguerilla.net>
parents: 92
diff changeset
     5
from ..model import User
92
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     6
93
ee10253258ad now right relative imports
Sandro Knauß <knauss@netzguerilla.net>
parents: 92
diff changeset
     7
from ..error import UserNotFound, InterfaceException, ValidateException
92
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     8
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     9
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    10
def rehash(hash):
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    11
    if not re.match(r'^[a-f0-9]{15,}$', hash.lower()):
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    12
        raise ValidateException()
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    13
    return True
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    14
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    15
def validate(**kargs):
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    16
    def v(f):
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    17
        def new_f(*a,**k):
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    18
            for i in kargs:
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    19
                kargs[i](k[i])
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    20
            return f(*a,**k)
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    21
        new_f.__name__ = f.__name__
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    22
        return new_f
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    23
    return v
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    24
            
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    25
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    26
@validate(userhash=rehash)
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    27
def getuser(userhash):
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    28
    with WithSession() as session:
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    29
        user = session.query(User).filter_by(apikey=userhash).first()
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    30
        if user is None:
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    31
            raise UserNotFound()
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    32
        else:
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    33
            return user
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    34
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    35
def with_user(f):
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    36
    def new_f(*args,**kargs):
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    37
        args=list(args)
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    38
        logging.debug("Entering %s"%f.__name__)
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    39
        try:
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    40
            kargs["user"]=getuser(userhash = kargs["apikey"])
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    41
            del kargs["apikey"]
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    42
        except KeyError:
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    43
            try:
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    44
                kargs["user"]=getuser(userhash = args[1])
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    45
            except IndexError:
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    46
                raise InterfaceException() 
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    47
            del args[1]
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    48
        ret=f(*args,**kargs)
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    49
        logging.debug("Exited %s"%f.__name__)
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    50
        return ret
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    51
    new_f.__name__ = f.__name__
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    52
    return new_f
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    53
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    54