iro/model/user.py
author Sandro Knauß <knauss@netzguerilla.net>
Fri, 24 Aug 2012 01:05:06 +0200
branchdevel
changeset 294 0e75bd39767d
parent 282 50cc13814bfb
permissions -rw-r--r--
adding LICENSE to all files
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
294
0e75bd39767d adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents: 282
diff changeset
     1
# Copyright (c) 2012 netzguerilla.net <iro@netzguerilla.net>
0e75bd39767d adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents: 282
diff changeset
     2
# 
0e75bd39767d adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents: 282
diff changeset
     3
# This file is part of Iro.
0e75bd39767d adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents: 282
diff changeset
     4
# 
0e75bd39767d adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents: 282
diff changeset
     5
# Permission is hereby granted, free of charge, to any person obtaining a copy of
0e75bd39767d adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents: 282
diff changeset
     6
# this software and associated documentation files (the "Software"), to deal in
0e75bd39767d adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents: 282
diff changeset
     7
# the Software without restriction, including without limitation the rights to use,
0e75bd39767d adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents: 282
diff changeset
     8
# copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
0e75bd39767d adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents: 282
diff changeset
     9
# #Software, and to permit persons to whom the Software is furnished to do so,
0e75bd39767d adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents: 282
diff changeset
    10
# subject to the following conditions:
0e75bd39767d adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents: 282
diff changeset
    11
# 
0e75bd39767d adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents: 282
diff changeset
    12
# The above copyright notice and this permission notice shall be included in
0e75bd39767d adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents: 282
diff changeset
    13
# all copies or substantial portions of the Software.
0e75bd39767d adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents: 282
diff changeset
    14
# 
0e75bd39767d adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents: 282
diff changeset
    15
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
0e75bd39767d adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents: 282
diff changeset
    16
# INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
0e75bd39767d adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents: 282
diff changeset
    17
# PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
0e75bd39767d adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents: 282
diff changeset
    18
# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
0e75bd39767d adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents: 282
diff changeset
    19
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
0e75bd39767d adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents: 282
diff changeset
    20
# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
0e75bd39767d adding LICENSE to all files
Sandro Knauß <knauss@netzguerilla.net>
parents: 282
diff changeset
    21
118
e16c0250c974 validate decorator can handle deferd validators
Sandro Knauß <knauss@netzguerilla.net>
parents: 117
diff changeset
    22
from twisted.internet import defer
282
50cc13814bfb make iro working with python v2.6
Sandro Knauß <knauss@netzguerilla.net>
parents: 263
diff changeset
    23
try:
50cc13814bfb make iro working with python v2.6
Sandro Knauß <knauss@netzguerilla.net>
parents: 263
diff changeset
    24
    from inspect import getcallargs
50cc13814bfb make iro working with python v2.6
Sandro Knauß <knauss@netzguerilla.net>
parents: 263
diff changeset
    25
except ImportError:
50cc13814bfb make iro working with python v2.6
Sandro Knauß <knauss@netzguerilla.net>
parents: 263
diff changeset
    26
    from ..inspect_getcallargs import getcallargs
50cc13814bfb make iro working with python v2.6
Sandro Knauß <knauss@netzguerilla.net>
parents: 263
diff changeset
    27
115
323d06431100 restructering validate
Sandro Knauß <knauss@netzguerilla.net>
parents: 114
diff changeset
    28
from decorator import decorator
106
d2992f011930 controller/user moved to model
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    29
d2992f011930 controller/user moved to model
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    30
from .schema import User
117
351a02310dd8 model restructuring
Sandro Knauß <knauss@netzguerilla.net>
parents: 115
diff changeset
    31
from .dbdefer import dbdefer
351a02310dd8 model restructuring
Sandro Knauß <knauss@netzguerilla.net>
parents: 115
diff changeset
    32
115
323d06431100 restructering validate
Sandro Knauß <knauss@netzguerilla.net>
parents: 114
diff changeset
    33
from ..validate import validate, vHash
106
d2992f011930 controller/user moved to model
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    34
from ..error import UserNotFound, InterfaceException
114
1ed072cc6793 reconstructing validate decorator
Sandro Knauß <knauss@netzguerilla.net>
parents: 111
diff changeset
    35
115
323d06431100 restructering validate
Sandro Knauß <knauss@netzguerilla.net>
parents: 114
diff changeset
    36
118
e16c0250c974 validate decorator can handle deferd validators
Sandro Knauß <knauss@netzguerilla.net>
parents: 117
diff changeset
    37
@validate(kwd="apikey", func=vHash, minlength=15, maxlength=15)
108
cadc01b2bdc0 model.user uses now the decorator DBDefer
Sandro Knauß <knauss@netzguerilla.net>
parents: 106
diff changeset
    38
@dbdefer
125
19b3f383c9ce getting job status form db
Sandro Knauß <knauss@netzguerilla.net>
parents: 118
diff changeset
    39
def getuser(session, apikey):
263
52284710c0b4 iro.model: adding docstrings
Sandro Knauß <knauss@netzguerilla.net>
parents: 125
diff changeset
    40
    """Returns a valid user object.
52284710c0b4 iro.model: adding docstrings
Sandro Knauß <knauss@netzguerilla.net>
parents: 125
diff changeset
    41
52284710c0b4 iro.model: adding docstrings
Sandro Knauß <knauss@netzguerilla.net>
parents: 125
diff changeset
    42
    :param session: a valid session object (is created by decorator :func:`iro.model.dbdefer.dbdefer`)
52284710c0b4 iro.model: adding docstrings
Sandro Knauß <knauss@netzguerilla.net>
parents: 125
diff changeset
    43
    :param string apikey: a vaild apikey (only [0-9a-f] is allowed)
52284710c0b4 iro.model: adding docstrings
Sandro Knauß <knauss@netzguerilla.net>
parents: 125
diff changeset
    44
    :return: a :class:`iro.model.schema.User` object
52284710c0b4 iro.model: adding docstrings
Sandro Knauß <knauss@netzguerilla.net>
parents: 125
diff changeset
    45
    :raises: :exc:`iro.error.UserNotFound`
52284710c0b4 iro.model: adding docstrings
Sandro Knauß <knauss@netzguerilla.net>
parents: 125
diff changeset
    46
    """
111
8b493ab9c74f userhash -> apikey fpr better Exception description
Sandro Knauß <knauss@netzguerilla.net>
parents: 108
diff changeset
    47
    user = session.query(User).filter_by(apikey=apikey).first()
106
d2992f011930 controller/user moved to model
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    48
    if user is None:
d2992f011930 controller/user moved to model
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    49
        raise UserNotFound()
d2992f011930 controller/user moved to model
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    50
    else:
d2992f011930 controller/user moved to model
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    51
        return user
d2992f011930 controller/user moved to model
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    52
115
323d06431100 restructering validate
Sandro Knauß <knauss@netzguerilla.net>
parents: 114
diff changeset
    53
@decorator
323d06431100 restructering validate
Sandro Knauß <knauss@netzguerilla.net>
parents: 114
diff changeset
    54
def vUser(f,*args,**kargs):
263
52284710c0b4 iro.model: adding docstrings
Sandro Knauß <knauss@netzguerilla.net>
parents: 125
diff changeset
    55
    """A Decorator to verify the apikey and execute the function with a valid :class:`iro.model.schema.User` instead of the apikey.
52284710c0b4 iro.model: adding docstrings
Sandro Knauß <knauss@netzguerilla.net>
parents: 125
diff changeset
    56
    
52284710c0b4 iro.model: adding docstrings
Sandro Knauß <knauss@netzguerilla.net>
parents: 125
diff changeset
    57
    The decorator expect the apikey in the **user** parameter.
52284710c0b4 iro.model: adding docstrings
Sandro Knauß <knauss@netzguerilla.net>
parents: 125
diff changeset
    58
52284710c0b4 iro.model: adding docstrings
Sandro Knauß <knauss@netzguerilla.net>
parents: 125
diff changeset
    59
    :return: a defer
52284710c0b4 iro.model: adding docstrings
Sandro Knauß <knauss@netzguerilla.net>
parents: 125
diff changeset
    60
    """ 
115
323d06431100 restructering validate
Sandro Knauß <knauss@netzguerilla.net>
parents: 114
diff changeset
    61
    kp=getcallargs(f,*args,**kargs)
323d06431100 restructering validate
Sandro Knauß <knauss@netzguerilla.net>
parents: 114
diff changeset
    62
    try:
323d06431100 restructering validate
Sandro Knauß <knauss@netzguerilla.net>
parents: 114
diff changeset
    63
        apikey = kp["user"]
323d06431100 restructering validate
Sandro Knauß <knauss@netzguerilla.net>
parents: 114
diff changeset
    64
    except KeyError:
323d06431100 restructering validate
Sandro Knauß <knauss@netzguerilla.net>
parents: 114
diff changeset
    65
        raise InterfaceException() 
323d06431100 restructering validate
Sandro Knauß <knauss@netzguerilla.net>
parents: 114
diff changeset
    66
    
323d06431100 restructering validate
Sandro Knauß <knauss@netzguerilla.net>
parents: 114
diff changeset
    67
    def _gotResult(_user):
323d06431100 restructering validate
Sandro Knauß <knauss@netzguerilla.net>
parents: 114
diff changeset
    68
        kp["user"]=_user
118
e16c0250c974 validate decorator can handle deferd validators
Sandro Knauß <knauss@netzguerilla.net>
parents: 117
diff changeset
    69
        e =  defer.maybeDeferred(f,**kp)
e16c0250c974 validate decorator can handle deferd validators
Sandro Knauß <knauss@netzguerilla.net>
parents: 117
diff changeset
    70
        return e
e16c0250c974 validate decorator can handle deferd validators
Sandro Knauß <knauss@netzguerilla.net>
parents: 117
diff changeset
    71
    d = defer.maybeDeferred(getuser, apikey=apikey)
115
323d06431100 restructering validate
Sandro Knauß <knauss@netzguerilla.net>
parents: 114
diff changeset
    72
    return d.addCallback(_gotResult)
106
d2992f011930 controller/user moved to model
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    73
d2992f011930 controller/user moved to model
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    74