iro/model/decorators.py
author Sandro Knauß <knauss@netzguerilla.net>
Fri, 02 Mar 2012 14:00:23 +0100
branchdevel
changeset 212 39e4c09e1b60
parent 210 3763babd5e10
child 258 0a5eb5aac0be
permissions -rw-r--r--
adding tests for vRoute with default and provider names

import types
from decorator import decorator

from .user import vUser
from .schema import Offer
from .dbdefer import  dbdefer
from .pool import runInDBPool

from ..error import ValidateException

@dbdefer
def vRoute(session, value, field, typ, allowString=True, allowList=True):
    str_ = False
    ret = []

    if type(value) is types.StringType:
        if not allowString:
            raise ValidateException(field=field,msg='%s must be a list of routes.'%field)
        str_=True
        value=[value]
    elif not allowList:
        raise ValidateException(field=field,msg='%s must be a route - No list of routes.'%field)

    routes = [o.name for o in Offer.routes(session,typ)]
    providers =  [o.provider for o in Offer.providers(session,typ)]
    for v in value:
        if v not in routes and v not in providers and v != "default":
            raise ValidateException(field=field,msg='Route %s is not valid.'%v)
        if v not in ret:
            ret.append(v)
    if str_:
        return ret[0]
    return ret

@dbdefer
def vTyp(value,field, session):
    for typ in Offer.typs(session):
        if value == typ[0]:
            break
    else:
        raise ValidateException(field=field,msg='Typ %s is not valid.'%value)
    return value