iro/model/decorators.py
branchdevel
changeset 205 02ae72e8bab9
parent 122 b55754aa4f96
child 208 5da0f00ef872
--- 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