iro/model/decorators.py
author Sandro Knauß <knauss@netzguerilla.net>
Fri, 02 Mar 2012 03:14:01 +0100
branchdevel
changeset 208 5da0f00ef872
parent 205 02ae72e8bab9
child 209 7a0f8fbdf7b8
permissions -rw-r--r--
session.typs -> Offer.typs

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 is not valid.')
    return value