# HG changeset patch # User Sandro Knauß # Date 1327719647 -3600 # Node ID e16c0250c9745b75be07af6a5d7940ffb662c832 # Parent 351a02310dd81631a2d5c8c9a88fe28eeceacae5 validate decorator can handle deferd validators diff -r 351a02310dd8 -r e16c0250c974 iro/model/decorators.py --- 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 diff -r 351a02310dd8 -r e16c0250c974 iro/model/user.py --- 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) diff -r 351a02310dd8 -r e16c0250c974 iro/validate.py --- 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