Refactoring tests.validate now use twisted.trial.unittests
This allows to test the validate decorator.
from twisted.internet import defer
from inspect import getcallargs
from decorator import decorator
from .schema import User
from .dbdefer import dbdefer
from ..validate import validate, vHash
from ..error import UserNotFound, InterfaceException
@validate(kwd="apikey", func=vHash, minlength=15, maxlength=15)
@dbdefer
def getuser(session, apikey):
user = session.query(User).filter_by(apikey=apikey).first()
if user is None:
raise UserNotFound()
else:
return user
@decorator
def vUser(f,*args,**kargs):
kp=getcallargs(f,*args,**kargs)
try:
apikey = kp["user"]
except KeyError:
raise InterfaceException()
def _gotResult(_user):
kp["user"]=_user
e = defer.maybeDeferred(f,**kp)
return e
d = defer.maybeDeferred(getuser, apikey=apikey)
return d.addCallback(_gotResult)