iro/model/user.py
author Sandro Knauß <knauss@netzguerilla.net>
Fri, 27 Jan 2012 15:01:59 +0100
branchdevel
changeset 114 1ed072cc6793
parent 111 8b493ab9c74f
child 115 323d06431100
permissions -rw-r--r--
reconstructing validate decorator
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
106
d2992f011930 controller/user moved to model
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     1
from inspect import getcallargs
114
1ed072cc6793 reconstructing validate decorator
Sandro Knauß <knauss@netzguerilla.net>
parents: 111
diff changeset
     2
from functools import wraps
106
d2992f011930 controller/user moved to model
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     3
d2992f011930 controller/user moved to model
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     4
from .schema import User
108
cadc01b2bdc0 model.user uses now the decorator DBDefer
Sandro Knauß <knauss@netzguerilla.net>
parents: 106
diff changeset
     5
from .utils import DBDefer
106
d2992f011930 controller/user moved to model
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     6
from ..validate import vuserhash, validate
d2992f011930 controller/user moved to model
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     7
from ..error import UserNotFound, InterfaceException
114
1ed072cc6793 reconstructing validate decorator
Sandro Knauß <knauss@netzguerilla.net>
parents: 111
diff changeset
     8
108
cadc01b2bdc0 model.user uses now the decorator DBDefer
Sandro Knauß <knauss@netzguerilla.net>
parents: 106
diff changeset
     9
dbdefer=DBDefer(None)
cadc01b2bdc0 model.user uses now the decorator DBDefer
Sandro Knauß <knauss@netzguerilla.net>
parents: 106
diff changeset
    10
cadc01b2bdc0 model.user uses now the decorator DBDefer
Sandro Knauß <knauss@netzguerilla.net>
parents: 106
diff changeset
    11
def setEngine(engine,autocommit=False): 
cadc01b2bdc0 model.user uses now the decorator DBDefer
Sandro Knauß <knauss@netzguerilla.net>
parents: 106
diff changeset
    12
    dbdefer.engine = engine
cadc01b2bdc0 model.user uses now the decorator DBDefer
Sandro Knauß <knauss@netzguerilla.net>
parents: 106
diff changeset
    13
    dbdefer.autocommit = autocommit
cadc01b2bdc0 model.user uses now the decorator DBDefer
Sandro Knauß <knauss@netzguerilla.net>
parents: 106
diff changeset
    14
cadc01b2bdc0 model.user uses now the decorator DBDefer
Sandro Knauß <knauss@netzguerilla.net>
parents: 106
diff changeset
    15
@dbdefer
114
1ed072cc6793 reconstructing validate decorator
Sandro Knauß <knauss@netzguerilla.net>
parents: 111
diff changeset
    16
@validate(kwd="apikey", func=vuserhash)
111
8b493ab9c74f userhash -> apikey fpr better Exception description
Sandro Knauß <knauss@netzguerilla.net>
parents: 108
diff changeset
    17
def getuser(apikey, session):
8b493ab9c74f userhash -> apikey fpr better Exception description
Sandro Knauß <knauss@netzguerilla.net>
parents: 108
diff changeset
    18
    user = session.query(User).filter_by(apikey=apikey).first()
106
d2992f011930 controller/user moved to model
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    19
    if user is None:
d2992f011930 controller/user moved to model
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    20
        raise UserNotFound()
d2992f011930 controller/user moved to model
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    21
    else:
d2992f011930 controller/user moved to model
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    22
        return user
d2992f011930 controller/user moved to model
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    23
d2992f011930 controller/user moved to model
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    24
def with_user(f):
114
1ed072cc6793 reconstructing validate decorator
Sandro Knauß <knauss@netzguerilla.net>
parents: 111
diff changeset
    25
    @wraps(f)
1ed072cc6793 reconstructing validate decorator
Sandro Knauß <knauss@netzguerilla.net>
parents: 111
diff changeset
    26
    def wrapper(*args,**kargs):
1ed072cc6793 reconstructing validate decorator
Sandro Knauß <knauss@netzguerilla.net>
parents: 111
diff changeset
    27
        kp=getcallargs(wrapper.original,*args,**kargs)
106
d2992f011930 controller/user moved to model
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    28
        try:
111
8b493ab9c74f userhash -> apikey fpr better Exception description
Sandro Knauß <knauss@netzguerilla.net>
parents: 108
diff changeset
    29
            apikey = kp["user"]
106
d2992f011930 controller/user moved to model
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    30
        except KeyError:
d2992f011930 controller/user moved to model
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    31
            raise InterfaceException() 
d2992f011930 controller/user moved to model
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    32
        
d2992f011930 controller/user moved to model
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    33
        def _gotResult(_user):
d2992f011930 controller/user moved to model
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    34
            kp["user"]=_user
d2992f011930 controller/user moved to model
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    35
            return f(**kp)
111
8b493ab9c74f userhash -> apikey fpr better Exception description
Sandro Knauß <knauss@netzguerilla.net>
parents: 108
diff changeset
    36
8b493ab9c74f userhash -> apikey fpr better Exception description
Sandro Knauß <knauss@netzguerilla.net>
parents: 108
diff changeset
    37
        d=getuser(apikey=apikey)
8b493ab9c74f userhash -> apikey fpr better Exception description
Sandro Knauß <knauss@netzguerilla.net>
parents: 108
diff changeset
    38
        return d.addCallback(_gotResult)
114
1ed072cc6793 reconstructing validate decorator
Sandro Knauß <knauss@netzguerilla.net>
parents: 111
diff changeset
    39
    try:
1ed072cc6793 reconstructing validate decorator
Sandro Knauß <knauss@netzguerilla.net>
parents: 111
diff changeset
    40
        wrapper.original=f.original
1ed072cc6793 reconstructing validate decorator
Sandro Knauß <knauss@netzguerilla.net>
parents: 111
diff changeset
    41
    except AttributeError:
1ed072cc6793 reconstructing validate decorator
Sandro Knauß <knauss@netzguerilla.net>
parents: 111
diff changeset
    42
        wrapper.original=f
1ed072cc6793 reconstructing validate decorator
Sandro Knauß <knauss@netzguerilla.net>
parents: 111
diff changeset
    43
    return wrapper
106
d2992f011930 controller/user moved to model
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    44
d2992f011930 controller/user moved to model
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    45