iro/validate.py
branchdevel
changeset 118 e16c0250c974
parent 115 323d06431100
child 125 19b3f383c9ce
--- a/iro/validate.py	Fri Jan 27 21:21:41 2012 +0100
+++ b/iro/validate.py	Sat Jan 28 04:00:47 2012 +0100
@@ -1,6 +1,8 @@
 import re
 from decorator import decorator
 
+from twisted.internet import defer
+
 from inspect import getcallargs
 from .error import ValidateException
 
@@ -40,14 +42,20 @@
     @decorator
     def v(f,*a,**k):
         kp=getcallargs(f,*a,**k)
+        def dfunc(*x,**y):
+            return None
         try:
             if need or kp[kwd] is not None:
-                kp[kwd] = func(kp[kwd],kwd,*args,**kargs)
-            else:
-                kp[kwd] = None
+                dfunc=func
         except KeyError:
             if need:
                 raise ValidateException(field=kwd,msg="%s is nessasary"%kwd)
-        return f(**kp)
+
+        def _gotResult(value):
+            kp[kwd] = value
+            e = defer.maybeDeferred(f,**kp)
+            return e
+        d = defer.maybeDeferred(dfunc, kp[kwd],kwd,*args,**kargs)
+        return d.addCallback(_gotResult)
     return v