iro/controller/user.py
author Sandro Knauß <knauss@netzguerilla.net>
Sun, 22 Jan 2012 02:36:12 +0100
branchdevel
changeset 102 85ac86f7ffc4
parent 96 883b25b0b760
permissions -rw-r--r--
reactor & sqlalchemy threadpools aufeinander abstimmen keine prints mehr
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 re
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     2
93
ee10253258ad now right relative imports
Sandro Knauß <knauss@netzguerilla.net>
parents: 92
diff changeset
     3
from ..model import User
92
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     4
93
ee10253258ad now right relative imports
Sandro Knauß <knauss@netzguerilla.net>
parents: 92
diff changeset
     5
from ..error import UserNotFound, InterfaceException, ValidateException
92
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     6
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     7
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     8
def rehash(hash):
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     9
    if not re.match(r'^[a-f0-9]{15,}$', hash.lower()):
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    10
        raise ValidateException()
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    11
    return True
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    12
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    13
def validate(**kargs):
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    14
    def v(f):
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    15
        def new_f(*a,**k):
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    16
            for i in kargs:
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    17
                kargs[i](k[i])
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    18
            return f(*a,**k)
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    19
        new_f.__name__ = f.__name__
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    20
        return new_f
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    21
    return v
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    22
            
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    23
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    24
@validate(userhash=rehash)
96
883b25b0b760 using nonblocking api for sqlalchemy
Sandro Knauß <knauss@netzguerilla.net>
parents: 93
diff changeset
    25
def getuser(userhash, session):
883b25b0b760 using nonblocking api for sqlalchemy
Sandro Knauß <knauss@netzguerilla.net>
parents: 93
diff changeset
    26
    user = session.query(User).filter_by(apikey=userhash).first()
883b25b0b760 using nonblocking api for sqlalchemy
Sandro Knauß <knauss@netzguerilla.net>
parents: 93
diff changeset
    27
    if user is None:
883b25b0b760 using nonblocking api for sqlalchemy
Sandro Knauß <knauss@netzguerilla.net>
parents: 93
diff changeset
    28
        raise UserNotFound()
883b25b0b760 using nonblocking api for sqlalchemy
Sandro Knauß <knauss@netzguerilla.net>
parents: 93
diff changeset
    29
    else:
883b25b0b760 using nonblocking api for sqlalchemy
Sandro Knauß <knauss@netzguerilla.net>
parents: 93
diff changeset
    30
        return user
92
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    31
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    32
def with_user(f):
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    33
    def new_f(*args,**kargs):
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    34
        args=list(args)
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    35
        try:
96
883b25b0b760 using nonblocking api for sqlalchemy
Sandro Knauß <knauss@netzguerilla.net>
parents: 93
diff changeset
    36
            userhash = kargs["apikey"]
92
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    37
            del kargs["apikey"]
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    38
        except KeyError:
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    39
            try:
96
883b25b0b760 using nonblocking api for sqlalchemy
Sandro Knauß <knauss@netzguerilla.net>
parents: 93
diff changeset
    40
                userhash = args[1]
883b25b0b760 using nonblocking api for sqlalchemy
Sandro Knauß <knauss@netzguerilla.net>
parents: 93
diff changeset
    41
                del args[1]
92
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    42
            except IndexError:
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    43
                raise InterfaceException() 
96
883b25b0b760 using nonblocking api for sqlalchemy
Sandro Knauß <knauss@netzguerilla.net>
parents: 93
diff changeset
    44
        
883b25b0b760 using nonblocking api for sqlalchemy
Sandro Knauß <knauss@netzguerilla.net>
parents: 93
diff changeset
    45
        def _gotResult(_user):
883b25b0b760 using nonblocking api for sqlalchemy
Sandro Knauß <knauss@netzguerilla.net>
parents: 93
diff changeset
    46
            kargs["user"]=_user
883b25b0b760 using nonblocking api for sqlalchemy
Sandro Knauß <knauss@netzguerilla.net>
parents: 93
diff changeset
    47
            return f(*args,**kargs)
883b25b0b760 using nonblocking api for sqlalchemy
Sandro Knauß <knauss@netzguerilla.net>
parents: 93
diff changeset
    48
        return getuser(userhash=userhash).addCallback(_gotResult)
883b25b0b760 using nonblocking api for sqlalchemy
Sandro Knauß <knauss@netzguerilla.net>
parents: 93
diff changeset
    49
92
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    50
    new_f.__name__ = f.__name__
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    51
    return new_f
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    52
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    53