# HG changeset patch # User Sandro Knauß # Date 1327231560 -3600 # Node ID d2992f011930bcbddd213f66cc15386500d2a9e9 # Parent 48f2b8adc7da62f114bbba6806e325a49b8732f6 controller/user moved to model seperate validation into own module diff -r 48f2b8adc7da -r d2992f011930 iro/controller/database.py --- a/iro/controller/database.py Sun Jan 22 02:38:25 2012 +0100 +++ b/iro/controller/database.py Sun Jan 22 12:26:00 2012 +0100 @@ -5,7 +5,7 @@ from twisted.internet import threads -from ..model import Base +from ..model.schema import Base engine = create_engine('sqlite:///:memory:', echo=True) diff -r 48f2b8adc7da -r d2992f011930 iro/controller/user.py --- a/iro/controller/user.py Sun Jan 22 02:38:25 2012 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,53 +0,0 @@ -import re - -from ..model import User - -from ..error import UserNotFound, InterfaceException, ValidateException - - -def rehash(hash): - if not re.match(r'^[a-f0-9]{15,}$', hash.lower()): - raise ValidateException() - return True - -def validate(**kargs): - def v(f): - def new_f(*a,**k): - for i in kargs: - kargs[i](k[i]) - return f(*a,**k) - new_f.__name__ = f.__name__ - return new_f - return v - - -@validate(userhash=rehash) -def getuser(userhash, session): - user = session.query(User).filter_by(apikey=userhash).first() - if user is None: - raise UserNotFound() - else: - return user - -def with_user(f): - def new_f(*args,**kargs): - args=list(args) - try: - userhash = kargs["apikey"] - del kargs["apikey"] - except KeyError: - try: - userhash = args[1] - del args[1] - except IndexError: - raise InterfaceException() - - def _gotResult(_user): - kargs["user"]=_user - return f(*args,**kargs) - return getuser(userhash=userhash).addCallback(_gotResult) - - new_f.__name__ = f.__name__ - return new_f - - diff -r 48f2b8adc7da -r d2992f011930 iro/controller/viewinterface.py --- a/iro/controller/viewinterface.py Sun Jan 22 02:38:25 2012 +0100 +++ b/iro/controller/viewinterface.py Sun Jan 22 12:26:00 2012 +0100 @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -from .user import with_user +from ..model.user import with_user class Interface(object): '''class for a xmlrpc user diff -r 48f2b8adc7da -r d2992f011930 iro/model/__init__.py --- a/iro/model/__init__.py Sun Jan 22 02:38:25 2012 +0100 +++ b/iro/model/__init__.py Sun Jan 22 12:26:00 2012 +0100 @@ -1,2 +1,2 @@ -from schema import Offer, Message, Job, User -from schema import Base +import schema +import user diff -r 48f2b8adc7da -r d2992f011930 iro/model/user.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/iro/model/user.py Sun Jan 22 12:26:00 2012 +0100 @@ -0,0 +1,31 @@ +from inspect import getcallargs + +from .schema import User +from ..validate import vuserhash, validate +from ..error import UserNotFound, InterfaceException + +@validate(userhash=vuserhash) +def getuser(userhash, session): + user = session.query(User).filter_by(apikey=userhash).first() + if user is None: + raise UserNotFound() + else: + return user + +def with_user(f): + def new_f(*args,**kargs): + kp=getcallargs(f,*args,**kargs) + try: + userhash = kp["user"] + except KeyError: + raise InterfaceException() + + def _gotResult(_user): + kp["user"]=_user + return f(**kp) + return getuser(userhash).addCallback(_gotResult) + + new_f.__name__ = f.__name__ + return new_f + + diff -r 48f2b8adc7da -r d2992f011930 iro/validate.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/iro/validate.py Sun Jan 22 12:26:00 2012 +0100 @@ -0,0 +1,27 @@ +import re +from inspect import getcallargs +from .error import ValidateException + +def vuserhash(hash): + '''vailidate function for userhash''' + if not re.match(r'^[a-f0-9]{15,}$', hash.lower()): + raise ValidateException() + return True + +def validate(**kargs): + '''validate decorator + use it like this: + @validate(userhash=vuserhash) + f(userhash) + that will validate usrhah with the function vuserhash. + Every validate function should raise an Exception, if the the value is not valide''' + def v(f): + def new_f(*a,**k): + kp=getcallargs(f,*a,**k) + for i in kargs: + kargs[i](kp[i]) + return f(*a,**k) + new_f.__name__ = f.__name__ + return new_f + return v + diff -r 48f2b8adc7da -r d2992f011930 tests/xmlrpc.py --- a/tests/xmlrpc.py Sun Jan 22 02:38:25 2012 +0100 +++ b/tests/xmlrpc.py Sun Jan 22 12:26:00 2012 +0100 @@ -5,10 +5,10 @@ import shutil from iro.controller.database import createDatabase,WithSession, DBDefer -import iro.controller.user as imuser +import iro.model.user as imuser import iro.controller.database as db -from iro.model import User +from iro.model.schema import User from ngdatabase.mysql import Server,createConfig,Database