iro/controller/viewinterface.py
branchdevel
changeset 253 e8d56537c9cc
parent 250 91890ea7ed81
child 268 d0fcb1cde990
equal deleted inserted replaced
252:d0de2ca7201a 253:e8d56537c9cc
     5 from ..validate import validate, vBool, vTel, vEmail, vInteger
     5 from ..validate import validate, vBool, vTel, vEmail, vInteger
     6 
     6 
     7 from .task import createJob
     7 from .task import createJob
     8 
     8 
     9 class Interface(object):
     9 class Interface(object):
    10     '''class for a xmlrpc user
    10     '''Interface for views.'''
    11     '''
       
    12     
    11     
    13     @validate(kwd="detailed", func=vBool, need=False)
    12     @validate(kwd="detailed", func=vBool, need=False)
    14     @validate(kwd="id", func=vInteger, minv=0, need=False, none_allowed=True)
    13     @validate(kwd="id", func=vInteger, minv=0, need=False, none_allowed=True)
    15     @vUser
    14     @vUser
    16     @dbdefer
    15     @dbdefer
    17     def status(self, session, user, id=None, detailed=False):
    16     def status(self, session, user, id=None, detailed=False):
    18         '''Gibt den aktuellen Status eines Auftrages oder Mehreren zurück.
    17         '''Gibt den aktuellen Status eines Auftrages oder Mehreren zurück.
    19 
    18 
    20         Keywords:
    19         :param string apikey: der API Key
    21         apikey[string]: Der API Key
    20         :param hash id: Eine Auftragsnummer
    22         id[hash]: Eine Auftragsnummer
    21         :param `boolean` detailed: Details ausgeben
    23         detailed[boolean]: Details ausgeben
    22 
    24 
    23         :return dict: 
    25         Return:
    24            - `key` ist die Auftragsnummer
    26         jobs[list]: Eine Liste der Aufträge.
    25            - [`key`][**'status'**] -- Status des Auftrages
    27         job.name[string]: Angebener Name
    26 
    28         job.status[string]: Status des Auftrages
    27         .. warning:: detailed is not used yet.
    29 
    28         
    30 
    29         >>> status(APIKEY)
       
    30         {"1":  {"status":"sended"},
       
    31          "2":  {"status":"error"},
       
    32          "10": {"status":"sending"}}
       
    33 
       
    34         >>> status(APIKEY,"10")
       
    35         {"10": {"status":"sending"}}
    31         '''
    36         '''
    32         user = session.merge(user)
    37         user = session.merge(user)
    33         ret={}
    38         ret={}
    34         if not id:
    39         if not id:
    35             for job in  user.jobs:
    40             for job in  user.jobs:
    43     @vUser
    48     @vUser
    44     @validate(kwd="route", func=vRoute, typ="sms")
    49     @validate(kwd="route", func=vRoute, typ="sms")
    45     def sms(self, user, message, recipients, route="default", info=""):
    50     def sms(self, user, message, recipients, route="default", info=""):
    46         '''Versendet eine SMS.
    51         '''Versendet eine SMS.
    47 
    52 
    48         Keywords:
    53         :param string apikey: Der API Key
    49         apikey[string]: Der API Key
    54         :param string message: Nachricht
    50         message[string]: Nachricht
    55         :param list recipients: eine Liste von Emfänger-Nummern (gemäß ITU-T E.123)
    51         recipients[list]: eine Liste von Emfänger-Nummern (gemäß ITU-T E.123)
    56         :param route: Route über den geschickt werden soll, 
    52         route[string|list]: Route über den geschickt werden soll, 
       
    53                             oder eine Liste von Routen, um Fallbacks anzugeben
    57                             oder eine Liste von Routen, um Fallbacks anzugeben
    54         info[string]: Infostring um eine Nachricht einer Gruppe zuorden zu können.
    58         :type route: string|list
    55 
    59         :param string info: Infostring um eine Nachricht einer Gruppe zuorden zu können.
    56         Return:
    60 
    57         id[hash]: Die ID des Auftrages
    61         :return hash: Die ID des Auftrages
    58 
    62 
    59         '''
    63         '''
    60         d = createJob(user, recipients, SMS(message), route, info)
    64         d = createJob(user, recipients, SMS(message), route, info)
    61         def ret(job):
    65         def ret(job):
    62             return job.dbjob
    66             return job.dbjob
    67     @vUser
    71     @vUser
    68     @validate(kwd="route",func=vRoute, typ="fax")
    72     @validate(kwd="route",func=vRoute, typ="fax")
    69     def fax(self, user, subject, fax, recipients, route="default", info=""):
    73     def fax(self, user, subject, fax, recipients, route="default", info=""):
    70         '''Versendet ein FAX.
    74         '''Versendet ein FAX.
    71 
    75 
    72         Keywords:
    76         :param string apikey: Der API Key
    73         apikey[string]: Der API Key
    77         :param string subject: Der Betreff
    74         subject[string]: Der Betreff
    78         :param string fax: Der base64 kodierte content
    75         fax[string]: Der base64 kodierte content
    79         :param list recipients: Eine Liste von Emfänger-Nummern (gemäß ITU-T E.123)
    76         recipients[list]: Eine Liste von Emfänger-Nummern (gemäß ITU-T E.123)
    80         :param route: Route über den geschickt werden soll, 
    77         route[string|list]: Route über den geschickt werden soll, 
       
    78                             oder eine Liste von Routen, um Fallbacks anzugeben
    81                             oder eine Liste von Routen, um Fallbacks anzugeben
    79         info[string]: Infostring um eine Nachricht einer Gruppe zuorden zu können.
    82         :type route: string|list
    80 
    83         :param string info: Infostring um eine Nachricht einer Gruppe zuorden zu können.
    81         Return:
    84 
    82         id[hash]: Die ID des Auftrages
    85         :return hash: Die ID des Auftrages
    83 
       
    84         '''
    86         '''
    85         d = createJob(user, recipients, Fax(subject, fax), route, info)
    87         d = createJob(user, recipients, Fax(subject, fax), route, info)
    86         def ret(job):
    88         def ret(job):
    87             return job.dbjob
    89             return job.dbjob
    88         d.addCallback(ret)
    90         d.addCallback(ret)
    93     @vUser
    95     @vUser
    94     @validate(kwd="route",func=vRoute, typ="mail")
    96     @validate(kwd="route",func=vRoute, typ="mail")
    95     def mail(self, user, subject, body, recipients, frm=None, route="default", info=""):
    97     def mail(self, user, subject, body, recipients, frm=None, route="default", info=""):
    96         '''Versendet eine Email.
    98         '''Versendet eine Email.
    97 
    99 
    98         Keywords:
   100         :param string apikey: Der API Key
    99         apikey[string]: Der API Key
   101         :param string subject: Der Betreff
   100         subject[string]: Der Betreff
   102         :param string body: Der Email Body
   101         body[string]: Der Email Body
   103         :param list recipients: Eine Liste von Emailadressen
   102         recipients[list]: Eine Liste von Emailadressen
   104         :param string frm: Die Absender Emailadresse
   103         frm[string]: Die Absender Emailadresse
   105         :param route: Route über den geschickt werden soll, 
   104         route[string|list]: Route über den geschickt werden soll, 
       
   105                             oder eine Liste von Routen, um Fallbacks anzugeben
   106                             oder eine Liste von Routen, um Fallbacks anzugeben
   106         info[string]: Infostring um eine Nachricht einer Gruppe zuorden zu können.
   107         :type route: string|list
   107 
   108         :param string info: Infostring um eine Nachricht einer Gruppe zuorden zu können.
   108         Return:
   109 
   109         id[hash]: Die ID des Auftrages
   110         :return hash: Die ID des Auftrages
   110 
       
   111         '''
   111         '''
   112 
   112 
   113         d = createJob(user, recipients, Mail(subject, body, frm), route, info)
   113         d = createJob(user, recipients, Mail(subject, body, frm), route, info)
   114         def ret(job):
   114         def ret(job):
   115             return job.dbjob
   115             return job.dbjob
   120     @vUser
   120     @vUser
   121     @dbdefer
   121     @dbdefer
   122     def routes(self, session, user, typ):
   122     def routes(self, session, user, typ):
   123         '''Gibt eine Liste aller verfügbaren Provider zurück.
   123         '''Gibt eine Liste aller verfügbaren Provider zurück.
   124 
   124 
   125         Keywords:
   125         :param string apikey: Der API Key
   126         apikey[string]: Der API Key
   126         :param string typ: Der Typ zu dem die Providerloste ausgeben werden soll
   127         typ[string]: Der Typ zu dem die Providerloste ausgeben werden soll
       
   128                      Einer der Liste ["sms","fax","mail"]
   127                      Einer der Liste ["sms","fax","mail"]
   129 
   128 
   130         Return:
   129         :return list: Eine Liste aller möglichen Provider
   131         providerlist[list]: Eine Liste aller möglichen Provider
       
   132 
       
   133         '''
   130         '''
   134         user = session.merge(user)
   131         user = session.merge(user)
   135         offers = user.routes(typ)
   132         offers = user.routes(typ)
   136         return [u[0] for u in offers]
   133         return [u[0] for u in offers]
   137         
   134         
   139     @vUser
   136     @vUser
   140     @dbdefer
   137     @dbdefer
   141     def defaultRoute(self, session, user, typ):
   138     def defaultRoute(self, session, user, typ):
   142         '''Gibt den Standardprovider zurück.
   139         '''Gibt den Standardprovider zurück.
   143  
   140  
   144         Keywords:
   141         :param string apikey: Der API Key
   145         apikey[string]: Der API Key
   142         :param string typ: Der Typ zu dem die Providerliste ausgeben werden soll
   146         typ[string]: Der Typ zu dem die Providerliste ausgeben werden soll
       
   147                      Einer der Liste ["sms","fax","mail"]
   143                      Einer der Liste ["sms","fax","mail"]
   148 
   144 
   149         Return:
   145         :return string: Der Standardprovider für den angeben Typ
   150         provider[string]: Der Standardprovider für den angeben Typ
       
   151 
       
   152 
       
   153         '''
   146         '''
   154         user = session.merge(user)
   147         user = session.merge(user)
   155         offers = user.routes(typ, default=True)
   148         offers = user.routes(typ, default=True)
   156         return [u[0] for u in offers]
   149         return [u[0] for u in offers]
   157 
   150 
   158     @vUser
   151     @vUser
   159     @dbdefer
   152     @dbdefer
   160     def bill(self, session, user):
   153     def bill(self, session, user):
   161         '''Gibt eine Rechnung zurück über die noch nicht abgerechneten Nachrichten und des Preises.
   154         '''Gibt eine Rechnung zurück über die noch nicht abgerechneten Nachrichten und des Preises.
   162 
   155 
   163         Keywords:
   156         :param string apikey: Der API Key
   164         apikey[string]: Der API Key
   157 
   165 
   158         :return dict:
   166         Return:
   159             - `route` -- Entspricht einer Route; **"total"** für die Gesammtübersicht
   167         bills[dict]: Eine Liste nach Nachrichtentypen
   160             - [`route`][`info`][**anz**] -- Anzahl der verschickten Nachrichten pro "Infoklasse"
   168         bill[route][info].anz: Anzahl der verschickten Nachrichten pro "Infoklasse"
   161             - [`route`][`info`][**price**] -- Preis pro "Infoklasse"
   169         bill[route][info].price: Preis pro "Infoklasse"
   162             - [`route` | **total**][**anz**] -- Anzahl der verschickten Nachrichten pro Route 
   170         bill[route].anz: Anzahl der verschickten Nachrichten pro Route 
   163             - [`route` | **total**][**price**] -- Preis für eine Route
   171         bill[route].price: Preis für eine Route
   164 
   172         total.price: der Gesammtpreis
   165         >>> bill(APIKEY)
   173         total.anz: die Gesammtanzahl
   166         {"route1": {"info1":{"anz":1,"price":2.00},
       
   167                     "info2":{"anz":2,"price":5.00},
       
   168                     "anz":3,"price":7.00},
       
   169         "route2":  {"info1":{"anz":3, "price":1.00},
       
   170                     "info3":{"anz":4, "price":8.00},
       
   171                     "anz":7, "price":9.00},
       
   172         "total":   {"anz":10, "price":16.00}
       
   173         }
       
   174 
   174         '''
   175         '''
   175         ret={'total':{'price':0, 'anz':0}}
   176         ret={'total':{'price':0, 'anz':0}}
   176         user=session.merge(user)
   177         user=session.merge(user)
   177         for route in user.rights:
   178         for route in user.rights:
   178             n=route.offer_name
   179             n=route.offer_name
   190 
   191 
   191     @validate(kwd="recipients",func=vTel)
   192     @validate(kwd="recipients",func=vTel)
   192     def telnumber(self,recipients):
   193     def telnumber(self,recipients):
   193         '''Gibt True zurück, falls alle übergebene Telefonnummern valide sind.
   194         '''Gibt True zurück, falls alle übergebene Telefonnummern valide sind.
   194         
   195         
   195         Keywords:
   196         :param list recipients: Eine Liste von Emfänger-Nummern (gemäß ITU-T E.123)
   196         recipients[list]: Eine Liste von Emfänger-Nummern (gemäß ITU-T E.123)
   197 
   197 
   198         :return: True -- alle übergebene Nummern sind valide
   198         Return:
       
   199         True: alle übergebene Nummern sind valide
       
   200         '''
   199         '''
   201         return True
   200         return True
   202 
   201 
   203     @validate(kwd="recipients",func=vEmail)
   202     @validate(kwd="recipients",func=vEmail)
   204     def email(self,recipients):
   203     def email(self,recipients):
   205         '''Gibt True zurück, falls alle übergebene Emailadressen valide sind.
   204         '''Gibt True zurück, falls alle übergebene Emailadressen valide sind.
   206         
   205         
   207         Keywords:
   206         :param list recipients: Eine Liste von Emailadressen
   208         recipients[list]: Eine Liste von Emailadressen
   207 
   209 
   208         :return: True -- alle übergebene Nummern sind valide
   210         Return:
       
   211         True: alle übergebene Nummern sind valide
       
   212         '''
   209         '''
   213         return True
   210         return True