iro/model/decorators.py
author Sandro Knauß <knauss@netzguerilla.net>
Thu, 29 Mar 2012 17:21:46 +0200
branchdevel
changeset 259 5d9c24c2cb8d
parent 258 0a5eb5aac0be
child 294 0e75bd39767d
permissions -rw-r--r--
iro.model.utils: adding docstrings
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
258
0a5eb5aac0be iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents: 212
diff changeset
     1
"""All decorators, that are created by this package.
0a5eb5aac0be iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents: 212
diff changeset
     2
0a5eb5aac0be iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents: 212
diff changeset
     3
Imports:
0a5eb5aac0be iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents: 212
diff changeset
     4
0a5eb5aac0be iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents: 212
diff changeset
     5
- :func:`.user.vUser` -- a validator for apikeys.
0a5eb5aac0be iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents: 212
diff changeset
     6
- :func:`.pool.runInDBPool` -- runs a actual function in dbpool.
0a5eb5aac0be iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents: 212
diff changeset
     7
"""
205
02ae72e8bab9 implementing vRoutes
Sandro Knauß <knauss@netzguerilla.net>
parents: 122
diff changeset
     8
import types
115
323d06431100 restructering validate
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     9
323d06431100 restructering validate
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    10
from .user import vUser
205
02ae72e8bab9 implementing vRoutes
Sandro Knauß <knauss@netzguerilla.net>
parents: 122
diff changeset
    11
from .schema import Offer
117
351a02310dd8 model restructuring
Sandro Knauß <knauss@netzguerilla.net>
parents: 115
diff changeset
    12
from .dbdefer import  dbdefer
351a02310dd8 model restructuring
Sandro Knauß <knauss@netzguerilla.net>
parents: 115
diff changeset
    13
from .pool import runInDBPool
351a02310dd8 model restructuring
Sandro Knauß <knauss@netzguerilla.net>
parents: 115
diff changeset
    14
351a02310dd8 model restructuring
Sandro Knauß <knauss@netzguerilla.net>
parents: 115
diff changeset
    15
from ..error import ValidateException
115
323d06431100 restructering validate
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    16
210
3763babd5e10 refactoring vRoute
Sandro Knauß <knauss@netzguerilla.net>
parents: 209
diff changeset
    17
@dbdefer
3763babd5e10 refactoring vRoute
Sandro Knauß <knauss@netzguerilla.net>
parents: 209
diff changeset
    18
def vRoute(session, value, field, typ, allowString=True, allowList=True):
258
0a5eb5aac0be iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents: 212
diff changeset
    19
    """ a validator to test a valid route. use with :func:`iro.validate.validate`. 
0a5eb5aac0be iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents: 212
diff changeset
    20
0a5eb5aac0be iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents: 212
diff changeset
    21
    :param session: a valid session object (is created by decorator :func:`iro.model.dbdefer.dbdefer`)
0a5eb5aac0be iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents: 212
diff changeset
    22
    :param value: the value to test
0a5eb5aac0be iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents: 212
diff changeset
    23
    :param string field: the field that is tested (only used to get a propper error message).
0a5eb5aac0be iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents: 212
diff changeset
    24
    :param string typ: a typ to test the route in
0a5eb5aac0be iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents: 212
diff changeset
    25
    :param boolean allowString: a single route is allowd.
0a5eb5aac0be iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents: 212
diff changeset
    26
    :param boolean allowList: a list of routes is allowed.
0a5eb5aac0be iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents: 212
diff changeset
    27
    :return: *value*, if value is a valid route for a given typ.
0a5eb5aac0be iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents: 212
diff changeset
    28
    :raises: :exc:`iro.error.ValidateException`
0a5eb5aac0be iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents: 212
diff changeset
    29
    """
210
3763babd5e10 refactoring vRoute
Sandro Knauß <knauss@netzguerilla.net>
parents: 209
diff changeset
    30
    str_ = False
3763babd5e10 refactoring vRoute
Sandro Knauß <knauss@netzguerilla.net>
parents: 209
diff changeset
    31
    ret = []
205
02ae72e8bab9 implementing vRoutes
Sandro Knauß <knauss@netzguerilla.net>
parents: 122
diff changeset
    32
210
3763babd5e10 refactoring vRoute
Sandro Knauß <knauss@netzguerilla.net>
parents: 209
diff changeset
    33
    if type(value) is types.StringType:
3763babd5e10 refactoring vRoute
Sandro Knauß <knauss@netzguerilla.net>
parents: 209
diff changeset
    34
        if not allowString:
3763babd5e10 refactoring vRoute
Sandro Knauß <knauss@netzguerilla.net>
parents: 209
diff changeset
    35
            raise ValidateException(field=field,msg='%s must be a list of routes.'%field)
3763babd5e10 refactoring vRoute
Sandro Knauß <knauss@netzguerilla.net>
parents: 209
diff changeset
    36
        str_=True
3763babd5e10 refactoring vRoute
Sandro Knauß <knauss@netzguerilla.net>
parents: 209
diff changeset
    37
        value=[value]
3763babd5e10 refactoring vRoute
Sandro Knauß <knauss@netzguerilla.net>
parents: 209
diff changeset
    38
    elif not allowList:
3763babd5e10 refactoring vRoute
Sandro Knauß <knauss@netzguerilla.net>
parents: 209
diff changeset
    39
        raise ValidateException(field=field,msg='%s must be a route - No list of routes.'%field)
205
02ae72e8bab9 implementing vRoutes
Sandro Knauß <knauss@netzguerilla.net>
parents: 122
diff changeset
    40
212
39e4c09e1b60 adding tests for vRoute with default and provider names
Sandro Knauß <knauss@netzguerilla.net>
parents: 210
diff changeset
    41
    routes = [o.name for o in Offer.routes(session,typ)]
39e4c09e1b60 adding tests for vRoute with default and provider names
Sandro Knauß <knauss@netzguerilla.net>
parents: 210
diff changeset
    42
    providers =  [o.provider for o in Offer.providers(session,typ)]
210
3763babd5e10 refactoring vRoute
Sandro Knauß <knauss@netzguerilla.net>
parents: 209
diff changeset
    43
    for v in value:
212
39e4c09e1b60 adding tests for vRoute with default and provider names
Sandro Knauß <knauss@netzguerilla.net>
parents: 210
diff changeset
    44
        if v not in routes and v not in providers and v != "default":
210
3763babd5e10 refactoring vRoute
Sandro Knauß <knauss@netzguerilla.net>
parents: 209
diff changeset
    45
            raise ValidateException(field=field,msg='Route %s is not valid.'%v)
3763babd5e10 refactoring vRoute
Sandro Knauß <knauss@netzguerilla.net>
parents: 209
diff changeset
    46
        if v not in ret:
3763babd5e10 refactoring vRoute
Sandro Knauß <knauss@netzguerilla.net>
parents: 209
diff changeset
    47
            ret.append(v)
3763babd5e10 refactoring vRoute
Sandro Knauß <knauss@netzguerilla.net>
parents: 209
diff changeset
    48
    if str_:
3763babd5e10 refactoring vRoute
Sandro Knauß <knauss@netzguerilla.net>
parents: 209
diff changeset
    49
        return ret[0]
3763babd5e10 refactoring vRoute
Sandro Knauß <knauss@netzguerilla.net>
parents: 209
diff changeset
    50
    return ret
117
351a02310dd8 model restructuring
Sandro Knauß <knauss@netzguerilla.net>
parents: 115
diff changeset
    51
118
e16c0250c974 validate decorator can handle deferd validators
Sandro Knauß <knauss@netzguerilla.net>
parents: 117
diff changeset
    52
@dbdefer
e16c0250c974 validate decorator can handle deferd validators
Sandro Knauß <knauss@netzguerilla.net>
parents: 117
diff changeset
    53
def vTyp(value,field, session):
258
0a5eb5aac0be iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents: 212
diff changeset
    54
    """ a validator to test a valid typ. use with :func:`iro.validate.validate`. 
0a5eb5aac0be iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents: 212
diff changeset
    55
0a5eb5aac0be iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents: 212
diff changeset
    56
    :param session: a valid session object (is created by decorator :func:`iro.model.dbdefer.dbdefer`)
0a5eb5aac0be iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents: 212
diff changeset
    57
    :param value: the value to test
0a5eb5aac0be iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents: 212
diff changeset
    58
    :param string field: the field that is tested (only used to get a propper error message).
0a5eb5aac0be iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents: 212
diff changeset
    59
    :return: *value*, if value is a valid typ.
0a5eb5aac0be iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents: 212
diff changeset
    60
    :raises: :exc:`iro.error.ValidateException`
0a5eb5aac0be iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents: 212
diff changeset
    61
    """
0a5eb5aac0be iro.model: adding docstring
Sandro Knauß <knauss@netzguerilla.net>
parents: 212
diff changeset
    62
208
5da0f00ef872 session.typs -> Offer.typs
Sandro Knauß <knauss@netzguerilla.net>
parents: 205
diff changeset
    63
    for typ in Offer.typs(session):
118
e16c0250c974 validate decorator can handle deferd validators
Sandro Knauß <knauss@netzguerilla.net>
parents: 117
diff changeset
    64
        if value == typ[0]:
e16c0250c974 validate decorator can handle deferd validators
Sandro Knauß <knauss@netzguerilla.net>
parents: 117
diff changeset
    65
            break
e16c0250c974 validate decorator can handle deferd validators
Sandro Knauß <knauss@netzguerilla.net>
parents: 117
diff changeset
    66
    else:
209
7a0f8fbdf7b8 adding tests for vTyp
Sandro Knauß <knauss@netzguerilla.net>
parents: 208
diff changeset
    67
        raise ValidateException(field=field,msg='Typ %s is not valid.'%value)
117
351a02310dd8 model restructuring
Sandro Knauß <knauss@netzguerilla.net>
parents: 115
diff changeset
    68
    return value