--- a/iro/model/decorators.py Fri Jan 27 21:21:41 2012 +0100
+++ b/iro/model/decorators.py Sat Jan 28 04:00:47 2012 +0100
@@ -13,13 +13,11 @@
return f(*args, **kwargs)
return wrapper
-from .utils import WithSession
-#@dbdefer
-def vTyp(value,field):
- with WithSession(dbdefer.engine) as session:
- for typ in session.query(Offer.typ).distinct():
- if value == typ[0]:
- break
- else:
- raise ValidateException(field=field,msg='Typ is not valid.')
+@dbdefer
+def vTyp(value,field, session):
+ for typ in session.query(Offer.typ).distinct():
+ if value == typ[0]:
+ break
+ else:
+ raise ValidateException(field=field,msg='Typ is not valid.')
return value
--- a/iro/model/user.py Fri Jan 27 21:21:41 2012 +0100
+++ b/iro/model/user.py Sat Jan 28 04:00:47 2012 +0100
@@ -1,3 +1,4 @@
+from twisted.internet import defer
from inspect import getcallargs
from decorator import decorator
@@ -8,8 +9,8 @@
from ..error import UserNotFound, InterfaceException
+@validate(kwd="apikey", func=vHash, minlength=15, maxlength=15)
@dbdefer
-@validate(kwd="apikey", func=vHash, minlength=15, maxlength=15)
def getuser(apikey, session):
user = session.query(User).filter_by(apikey=apikey).first()
if user is None:
@@ -27,9 +28,9 @@
def _gotResult(_user):
kp["user"]=_user
- return f(**kp)
-
- d=getuser(apikey=apikey)
+ e = defer.maybeDeferred(f,**kp)
+ return e
+ d = defer.maybeDeferred(getuser, apikey=apikey)
return d.addCallback(_gotResult)
--- 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