iro/model/decorators.py
branchdevel
changeset 205 02ae72e8bab9
parent 122 b55754aa4f96
child 208 5da0f00ef872
equal deleted inserted replaced
204:4eb663df29fb 205:02ae72e8bab9
       
     1 import types
     1 from decorator import decorator
     2 from decorator import decorator
     2 
     3 
     3 from .user import vUser
     4 from .user import vUser
       
     5 from .schema import Offer
     4 from .dbdefer import  dbdefer
     6 from .dbdefer import  dbdefer
     5 from .pool import runInDBPool
     7 from .pool import runInDBPool
     6 
     8 
     7 from ..error import ValidateException
     9 from ..error import ValidateException
     8 
    10 
     9 def vRoute(typ):
    11 def vRoute(typ):
    10     @decorator
    12     @dbdefer
    11     def wrapper(f, *args, **kwargs):
    13     def wrapper(session, value, field, allowString=True, allowList=True):
    12         return f(*args, **kwargs)
    14         str_ = False
       
    15         ret = []
       
    16 
       
    17         if type(value) is types.StringType:
       
    18             if not allowString:
       
    19                 raise ValidateException(field=field,msg='%s must be a list of routes.'%field)
       
    20             str_=True
       
    21             value=[value]
       
    22         elif not allowList:
       
    23             raise ValidateException(field=field,msg='%s must be a route - No list of routes.'%field)
       
    24 
       
    25         routes =[o.name for o in Offer.routes(session,typ)]
       
    26         for v in value:
       
    27             if v not in routes:
       
    28                 raise ValidateException(field=field,msg='Route %s is not valid.'%v)
       
    29             if v not in ret:
       
    30                 ret.append(v)
       
    31         if str_:
       
    32             return ret[0]
       
    33         return ret
    13     return wrapper
    34     return wrapper
    14 
    35 
    15 @dbdefer
    36 @dbdefer
    16 def vTyp(value,field, session):
    37 def vTyp(value,field, session):
    17     for typ in session.typs:
    38     for typ in session.typs: