iro/model/decorators.py
author Sandro Knauß <knauss@netzguerilla.net>
Fri, 23 Mar 2012 16:22:32 +0100
branchdevel
changeset 244 48fba7b4afe9
parent 212 39e4c09e1b60
child 258 0a5eb5aac0be
permissions -rw-r--r--
all magic utf-8 stuff is now in iro.model.message

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