--- 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)