iro/model/decorators.py
author Sandro Knauß <knauss@netzguerilla.net>
Fri, 02 Mar 2012 03:25:21 +0100
branchdevel
changeset 209 7a0f8fbdf7b8
parent 208 5da0f00ef872
child 210 3763babd5e10
permissions -rw-r--r--
adding tests for vTyp

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 Offer.typs(session):
        if value == typ[0]:
            break
    else:
        raise ValidateException(field=field,msg='Typ %s is not valid.'%value)
    return value