iro/model/decorators.py
author Sandro Knauß <knauss@netzguerilla.net>
Fri, 02 Mar 2012 03:01:46 +0100
branchdevel
changeset 207 90a81145852c
parent 205 02ae72e8bab9
child 208 5da0f00ef872
permissions -rw-r--r--
tests for vRoute

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

def vRoute(typ):
    @dbdefer
    def wrapper(session, value, field, 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)]
        for v in value:
            if v not in routes:
                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
    return wrapper

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