# HG changeset patch # User Sandro Knauß # Date 1327682997 -3600 # Node ID 323d06431100aaf479ade29bc830d6d5e1beb008 # Parent 1ed072cc6793597de16936c98f2c539ccb2c04b4 restructering validate diff -r 1ed072cc6793 -r 323d06431100 iro/controller/viewinterface.py --- a/iro/controller/viewinterface.py Fri Jan 27 15:01:59 2012 +0100 +++ b/iro/controller/viewinterface.py Fri Jan 27 17:49:57 2012 +0100 @@ -1,13 +1,15 @@ # -*- coding: utf-8 -*- -from ..model.user import with_user -from ..validate import validate, boolean, validateHash +from ..model.decorators import vUser, vRoute +from ..model.utils import vTyp +from ..validate import validate, vBool, vHash, vTel, vEmail + class Interface(object): '''class for a xmlrpc user ''' - @validate(kwd="detailed", func=boolean, need=False) - @validate(kwd="id", func=validateHash, need=False) - @with_user + @validate(kwd="detailed", func=vBool, need=False) + @validate(kwd="id", func=vHash, need=False, maxlength=40) + @vUser def status(self, user, id=None, detailed=False): '''Gibt den aktuellen Status eines Auftrages oder Mehreren zurück. @@ -30,7 +32,8 @@ #return user.status(id,detailed) return "" - @with_user + @vUser + @validate(kwd="id", func=vHash,maxlength=40) def stop(self, user, id): '''Stoppt den angegeben Auftrag. @@ -43,8 +46,10 @@ ''' return "" - @with_user - def sms(self, user, message, recipients, route="default"): + @validate(kwd="recipients",func=vTel) + @vUser + @vRoute(typ="sms") + def sms(self, user, message, recipients, route="default", info=""): '''Versendet eine SMS. Keywords: @@ -60,8 +65,10 @@ ''' return "" - @with_user - def fax(self, user, subject, fax, recipients, route="default"): + @validate(kwd="recipients",func=vTel) + @vUser + @vRoute(typ="fax") + def fax(self, user, subject, fax, recipients, route="default", info=""): '''Versendet ein FAX. Keywords: @@ -78,8 +85,10 @@ ''' return "" - @with_user - def mail(self, user, subject, body, recipients, frm, route="default"): + @validate(kwd="recipients",func=vEmail) + @vUser + @vRoute(typ="mail") + def mail(self, user, subject, body, recipients, frm, route="default", info=""): '''Versendet eine Email. Keywords: @@ -97,7 +106,8 @@ ''' return "" - @with_user + @validate(kwd="typ", func=vTyp) + @vUser def routes(self, user, typ): '''Gibt eine Liste aller verfügbaren Provider zurück. @@ -112,7 +122,8 @@ ''' return "" - @with_user + @validate(kwd="typ", func=vTyp) + @vUser def defaultRoute(self, user, typ): '''Gibt den Standardprovider zurück. @@ -128,7 +139,7 @@ ''' return "" - @with_user + @vUser def statistic(self, user): '''Gibt eine Statik zurück über die versendendeten Nachrichten und des Preises. diff -r 1ed072cc6793 -r 323d06431100 iro/model/decorators.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/iro/model/decorators.py Fri Jan 27 17:49:57 2012 +0100 @@ -0,0 +1,10 @@ +from decorator import decorator + +from .utils import DBDefer +from .user import vUser + +def vRoute(typ): + @decorator + def wrapper(f, *args, **kwargs): + return f(*args, **kwargs) + return wrapper diff -r 1ed072cc6793 -r 323d06431100 iro/model/user.py --- a/iro/model/user.py Fri Jan 27 15:01:59 2012 +0100 +++ b/iro/model/user.py Fri Jan 27 17:49:57 2012 +0100 @@ -1,9 +1,9 @@ from inspect import getcallargs -from functools import wraps +from decorator import decorator from .schema import User from .utils import DBDefer -from ..validate import vuserhash, validate +from ..validate import validate, vHash from ..error import UserNotFound, InterfaceException dbdefer=DBDefer(None) @@ -12,8 +12,9 @@ dbdefer.engine = engine dbdefer.autocommit = autocommit + @dbdefer -@validate(kwd="apikey", func=vuserhash) +@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: @@ -21,25 +22,19 @@ else: return user -def with_user(f): - @wraps(f) - def wrapper(*args,**kargs): - kp=getcallargs(wrapper.original,*args,**kargs) - try: - apikey = kp["user"] - except KeyError: - raise InterfaceException() - - def _gotResult(_user): - kp["user"]=_user - return f(**kp) +@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 + return f(**kp) - d=getuser(apikey=apikey) - return d.addCallback(_gotResult) - try: - wrapper.original=f.original - except AttributeError: - wrapper.original=f - return wrapper + d=getuser(apikey=apikey) + return d.addCallback(_gotResult) diff -r 1ed072cc6793 -r 323d06431100 iro/model/utils.py --- a/iro/model/utils.py Fri Jan 27 15:01:59 2012 +0100 +++ b/iro/model/utils.py Fri Jan 27 17:49:57 2012 +0100 @@ -58,3 +58,6 @@ with WithSession(self.engine, self.autocommit) as session: return func(*args, session=session, **kwargs) return wrapper + +def vTyp(value,field): + return value diff -r 1ed072cc6793 -r 323d06431100 iro/validate.py --- a/iro/validate.py Fri Jan 27 15:01:59 2012 +0100 +++ b/iro/validate.py Fri Jan 27 17:49:57 2012 +0100 @@ -1,12 +1,12 @@ import re -from functools import wraps +from decorator import decorator from inspect import getcallargs from .error import ValidateException -def boolean(value, field): - t=[True,"true",1] - f=[False,"false",0] +def vBool(value, field): + t=[True, 1, "true", "True", "TRUE"] + f=[False, 0, "false", "False", "FALSE"] if value in t: return True elif value in f: @@ -15,7 +15,7 @@ raise ValidateException(field=field, msg='%s is not boolean' % field) -def validateHash(value,field,minlength=None,maxlength=None): +def vHash(value,field,minlength=None,maxlength=None): if not re.match(r'^[a-f0-9]*$', value.lower()): raise ValidateException(field=field) if minlength and len(value)=0.11',"ngmodules>=0.2"], - install_requires=['twisted>=11.1.0',"xmlrpclib","ConfigParser","multiprocessing","sqlalchemy","MySQL-python","SOAPpy"], + install_requires=['twisted>=11.1.0',"xmlrpclib","ConfigParser","multiprocessing","sqlalchemy","MySQL-python","SOAPpy",'decorator'], test_suite="nose.collector", description='Non Blocking Interface for sending a bunsh of SMSes, FAXes and Mails', author='Sandro Knauß',