controller/user moved to model devel
authorSandro Knauß <knauss@netzguerilla.net>
Sun, 22 Jan 2012 12:26:00 +0100
branchdevel
changeset 106 d2992f011930
parent 105 48f2b8adc7da
child 107 f11520354165
controller/user moved to model seperate validation into own module
iro/controller/database.py
iro/controller/user.py
iro/controller/viewinterface.py
iro/model/__init__.py
iro/model/user.py
iro/validate.py
tests/xmlrpc.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)
 
--- 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
-
-
--- 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
--- 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
--- /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
+
+
--- /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
+ 
--- 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