diff -r 4eb663df29fb -r 02ae72e8bab9 iro/model/decorators.py --- a/iro/model/decorators.py Thu Mar 01 21:00:31 2012 +0100 +++ b/iro/model/decorators.py Fri Mar 02 02:50:17 2012 +0100 @@ -1,15 +1,36 @@ +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): - @decorator - def wrapper(f, *args, **kwargs): - return f(*args, **kwargs) + @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