iro/newinterface.py
branchdevel
changeset 81 fea4c6760ca5
parent 80 265124610789
child 85 edf7e94cd607
--- a/iro/newinterface.py	Sun Dec 18 16:43:22 2011 +0100
+++ b/iro/newinterface.py	Sun Dec 18 18:03:45 2011 +0100
@@ -14,12 +14,73 @@
 import logging
 logging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(name)s(%(processName)s)-%(levelname)s: %(message)s')
 
+
+class User(object):
+    def __init__(self,name,userhash):
+        self.name=name
+        self.userhash=userhash
+    
+    def __repr__(self):
+        return"User<'%s','%s'>"%(self.name,self.userhash)
+
+users={"1":User("spam","1"),
+       "2":User("foo","2")
+}
+
+def getuser(userhash):
+    try:
+        return users[userhash]
+    except KeyError:
+        raise UserNotFound()
+
+def with_user(f):
+    def new_f(*args,**kargs):
+        args=list(args)
+        try:
+            logging.debug("Entering %s"%f.__name__)
+            try:
+                kargs["user"]=getuser(kargs["apikey"])
+                del kargs["apikey"]
+            except KeyError:
+                kargs["user"]=getuser(args[1])
+                del args[1]
+            ret=f(*args,**kargs)
+            logging.debug("Exited %s"%f.__name__)
+            return ret
+        except InterfaceException, e:
+            return e.dict()
+    new_f.__name__ = f.__name__
+    return new_f
+
+
+class InterfaceException(Exception):
+    def __init__(self, code=999, msg="Unbekannter Fehler."):
+        self.code=code
+        self.msg=msg
+
+    def dict(self):
+        return {"code":self.code,
+                "msg":self.msg,
+                }
+    def __str__(self):
+        return "%i:%s"%(self.code,self.msg)
+
+class UserNotFound(InterfaceException):
+    def __init__(self):
+        InterfaceException.__init__(self, 901, "Der API-Key ist ungültig.")
+
+class ExternalException(InterfaceException):
+    def __init__(self):
+        InterfaceException.__init__(self, 950, "Fehler in externer API.")
+
+
 class Interface(object):
     '''class for a xmlrpc user
     '''
     
-    def status(self, apikey, id=None, detailed=False):
-        '''Gibt den aktuellen Status eines Auftrages zurück.
+    @with_user
+    def status(self, user, id=None, detailed=False):
+        '''Gibt den aktuellen Status eines Auftrages oder Mehreren zurück.
 
         Keywords:
         apikey[string]: Der API Key
@@ -33,9 +94,11 @@
 
 
         '''
+        #return user.status(id,detailed)
         return ""
 
-    def stop(self, apikey,id):
+    @with_user
+    def stop(self, user, id):
         '''Stoppt den angegeben Auftrag.
 
         Keywords:
@@ -47,7 +110,8 @@
         '''
         return ""
     
-    def sms(self, apikey, message, recipients, route="default"):
+    @with_user
+    def sms(self, user, message, recipients, route="default"):
         '''Versendet eine SMS.
 
         Keywords:
@@ -63,8 +127,8 @@
         '''
         return ""
    
-    
-    def fax(self, apikey, subject, fax, recipients, route="default"):
+    @with_user
+    def fax(self, user, subject, fax, recipients, route="default"):
         '''Versendet ein FAX.
 
         Keywords:
@@ -81,7 +145,8 @@
         '''
         return ""
 
-    def mail(self, apikey, subject,  body, recipients, frm, route="default"):
+    @with_user
+    def mail(self, user, subject,  body, recipients, frm, route="default"):
         '''Versendet eine Email.
 
         Keywords:
@@ -99,7 +164,8 @@
         '''
         return ""
        
-    def routes(self, apikey, typ):
+    @with_user
+    def routes(self, user, typ):
         '''Gibt eine Liste aller verfügbaren Provider zurück.
 
         Keywords:
@@ -113,7 +179,8 @@
         '''
         return ""
         
-    def defaultRoute(self, apikey, typ):
+    @with_user
+    def defaultRoute(self, user, typ):
         '''Gibt den Standardprovider zurück.
  
         Keywords:
@@ -128,7 +195,8 @@
         '''
         return ""
 
-    def statistic(self,apikey):
+    @with_user
+    def statistic(self, user):
         '''Gibt eine Statik zurück über die versendendeten Nachrichten und des Preises.
 
         Keywords:
@@ -157,7 +225,6 @@
     def __init__(self):
         xmlrpc.XMLRPC.__init__(self) 
         Interface.__init__(self)
-        self.allowNone = True
     
     def lookupProcedure(self, procedurePath):
         logging.debug("lookupProcedure('%s')"%procedurePath)