iro/view/xmlrpc_old.py
branchdevel
changeset 248 830204e316ca
parent 76 9f7da8dc8df8
child 265 f6c906b40cce
equal deleted inserted replaced
239:4cf5e664c847 248:830204e316ca
       
     1 # -*- coding: utf-8 -*-
       
     2 #Copyright (C) 2009  Sandro Knauß <bugs@sandroknauss.de>
       
     3 
       
     4 #This program is free software; you can redistribute it and/or modify it under the terms
       
     5 #of the GNU General Public License as published by the Free Software Foundation;
       
     6 #either version 3 of the License, or any later version.
       
     7 #This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
       
     8 #without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
       
     9 #See the GNU General Public License for more details.
       
    10 
       
    11 #You should have received a copy of the GNU General Public License
       
    12 #along with this program; if not, see <http://www.gnu.org/licenses/>.
       
    13 import logging
       
    14 logger=logging.getLogger("iro.user")
       
    15 class NotSupportedFeature (Exception):
       
    16     def __init__(self,name):
       
    17         self.name=name
       
    18     
       
    19     def __str__(self):
       
    20         return ("This is not a supported feature:", self.name)
       
    21 
       
    22 class NoID(Exception):
       
    23     def __init__(self,i):
       
    24         self.i=i
       
    25     
       
    26     def __str__(self):
       
    27         return ("No Job with id:", self.i)
       
    28 
       
    29 
       
    30 class User: 
       
    31     '''class for a xmlrpc user
       
    32     '''
       
    33     def __init__(self, name, jobqueue):
       
    34         self.jobqueue=jobqueue
       
    35         self.jobs={}
       
    36         self.name=name
       
    37         self.features=["mail", "sms", "fax", ]
       
    38 
       
    39     def status(self,id=None,detailed=False):
       
    40         '''Gibt den aktuellen Status eines Auftrages zurück.
       
    41 
       
    42         Keywords:
       
    43         id[hash]: Eine Auftragsnummer
       
    44         detailed[boolean]: Details ausgeben
       
    45 
       
    46         Return:
       
    47         jobs[list]: Eine Liste der Aufträge.
       
    48         job.name[string]: Angebener Name
       
    49         job.status[string]: Status des Auftrages
       
    50 
       
    51 
       
    52         '''
       
    53         try:
       
    54             jobs={}
       
    55             if id==None:
       
    56                 jobs=self.jobs
       
    57             else:
       
    58                 try:
       
    59                     jobs={id:self.jobs[id]}
       
    60                 except:
       
    61                     logger.error("No Job ID %s",id)
       
    62                     #raise NoID(id)
       
    63             ret={}
       
    64             if not jobs:
       
    65                 return {}
       
    66 
       
    67             for key in jobs:
       
    68                 job=jobs[key]
       
    69                 ret[key]={"name":job.getName(),"status":job.getStatus(detailed)}
       
    70             
       
    71             return ret
       
    72         except:
       
    73             logger.exception("Fehler in iro.user.status")
       
    74             return {}
       
    75 
       
    76     def stop(self,id):
       
    77         '''Stoppt den angegeben Auftrag.
       
    78 
       
    79         Keywords:
       
    80         id[hash]: Eine Auftragsnummer
       
    81 
       
    82         Return:
       
    83 
       
    84         '''
       
    85         try:
       
    86             job=self.jobs[id]
       
    87             job.stop()
       
    88         except:
       
    89             raise NoID(id)
       
    90         job.stop()
       
    91 
       
    92     
       
    93     def startSMS(self, message, recipients, provider="default"):
       
    94         '''Versendet eine SMS.
       
    95 
       
    96         Keywords:
       
    97         message[string]: Nachricht
       
    98         recipients[list]: eine Liste von Emfänger-Nummern (gemäß ITU-T E.123)
       
    99         provider[string]: Provider über den geschickt werden soll
       
   100 
       
   101         Return:
       
   102         id[hash]: Die ID des Auftrages
       
   103 
       
   104         '''
       
   105         if not "sms" in self.features:
       
   106             raise NotSupportedFeature("sms")
       
   107         id = self.jobqueue.newSMS(message,recipients,provider,user=self.name)
       
   108         self.jobs[id]=self.jobqueue[id]
       
   109         return id
       
   110     
       
   111     
       
   112     def startFAX(self, subject, fax, recipients, provider="default"):
       
   113         '''Versendet ein FAX.
       
   114 
       
   115         Keywords:
       
   116         subject[string]: der Betreff
       
   117         fax[string]: das pdf base64 kodiert
       
   118         recipients[list]: eine Liste von Emfänger-Nummern (gemäß ITU-T E.123)
       
   119         provider[string]: Provider über den geschickt werden soll
       
   120 
       
   121         Return:
       
   122         id[hash]: Die ID des Auftrages
       
   123 
       
   124         '''
       
   125         logger.debug("startFAX(%s,%s,%s,%s)"%(subject, fax, recipients, provider))
       
   126         if not "fax" in self.features:
       
   127             raise NotSupportedFeature("fax")
       
   128         
       
   129         if type(fax) != list:
       
   130             fax=[fax]
       
   131         f=[i.data for i in fax]
       
   132 
       
   133         id = self.jobqueue.newFAX(subject, f,recipients,provider,user=self.name)
       
   134         self.jobs[id]=self.jobqueue[id]
       
   135         return id
       
   136 
       
   137     def startMail(self, subject,  body, recipients, frm, provider="default"):
       
   138         '''Versendet eine Email.
       
   139 
       
   140         Keywords:
       
   141         subject[string]: der Betreff
       
   142         body[string]: der Email Body
       
   143         recipients[list]: eine Liste von Emailadressen
       
   144         frm[string]: Die Absender Emailadresse
       
   145         provider[string]: Provider über den geschickt werden soll
       
   146 
       
   147         Return:
       
   148         id[hash]: Die ID des Auftrages
       
   149 
       
   150         '''
       
   151         if not "mail" in self.features:
       
   152             raise NotSupportedFeature("mail")
       
   153         logger.debug("startMail(%s,%s,%s,%s,%s)"%(subject, body, recipients, frm, provider))
       
   154         id = self.jobqueue.newMail(subject, body, recipients, frm,  provider,user=self.name)
       
   155         self.jobs[id]=self.jobqueue[id]
       
   156         return id    
       
   157        
       
   158     def getProvider(self, typ):
       
   159         '''Gibt eine Liste aller verfügbaren Provider zurück.
       
   160 
       
   161         Keywords:
       
   162         typ[string]: Der Typ zu dem die Providerloste ausgeben werden soll
       
   163                      Einer der Liste ["sms","fax","mail"]
       
   164 
       
   165         Return:
       
   166         providerlist[list]: Eine Liste aller möglichen Provider
       
   167 
       
   168         '''
       
   169         if not typ in self.features:
       
   170             raise NotSupportedFeature(typ)
       
   171        
       
   172         return self.jobqueue.providerlist.getProviderlist(typ)
       
   173         
       
   174     def getDefaultProvider(self, typ):
       
   175         '''Gibt den Standardprovider zurück.
       
   176  
       
   177         Keywords:
       
   178         typ[string]: Der Typ zu dem die Providerloste ausgeben werden soll
       
   179                      Einer der Liste ["sms","fax","mail"]
       
   180 
       
   181         Return:
       
   182         provider[string]: Der Standardprovider für den angeben Typ
       
   183 
       
   184 
       
   185         '''
       
   186         if not typ in self.features:
       
   187             raise NotSupportedFeature(typ)
       
   188        
       
   189         return self.jobqueue.providerlist.getDefault(typ)["name"]
       
   190         
       
   191 class Admin(User):
       
   192     def __init__(self, name, jobqueue):
       
   193         User.__init__(self, name, jobqueue)
       
   194         self.jobs=jobqueue.jobs