iro/user.py
changeset 302 3f4bdea2abbf
parent 90 eb04ac3a8327
parent 301 d5ebbcccc41b
child 303 9708742ff89c
equal deleted inserted replaced
90:eb04ac3a8327 302:3f4bdea2abbf
     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     '''
       
    32     class for a xmlrpc user
       
    33     '''
       
    34     def __init__(self, name, jobqueue):
       
    35         self.jobqueue=jobqueue
       
    36         self.jobs={}
       
    37         self.name=name
       
    38         self.features=["mail", "sms", "fax", ]
       
    39 
       
    40     def status(self,id=None,detailed=False):
       
    41         u'''Gibt den aktuellen Status eines Auftrages zurück.
       
    42 
       
    43         Keywords:
       
    44         id[hash]: Eine Auftragsnummer
       
    45         detailed[boolean]: Details ausgeben
       
    46 
       
    47         Return:
       
    48         jobs[list]: Eine Liste der Aufträge.
       
    49         job.name[string]: Angebener Name
       
    50         job.status[string]: Status des Auftrages
       
    51 
       
    52 
       
    53         '''
       
    54         try:
       
    55             jobs={}
       
    56             if id==None:
       
    57                 jobs=self.jobs
       
    58             else:
       
    59                 try:
       
    60                     jobs={id:self.jobs[id]}
       
    61                 except:
       
    62                     logger.error("No Job ID %s",id)
       
    63                     #raise NoID(id)
       
    64             ret={}
       
    65             if not jobs:
       
    66                 return {}
       
    67 
       
    68             for key in jobs:
       
    69                 job=jobs[key]
       
    70                 ret[key]={"name":job.getName(),"status":job.getStatus(detailed)}
       
    71             
       
    72             return ret
       
    73         except:
       
    74             logger.exception("Fehler in iro.user.status")
       
    75             return {}
       
    76 
       
    77     def stop(self,id):
       
    78         u'''Stoppt den angegeben Auftrag.
       
    79 
       
    80         Keywords:
       
    81         id[hash]: Eine Auftragsnummer
       
    82 
       
    83         Return:
       
    84 
       
    85         '''
       
    86         try:
       
    87             job=self.jobs[id]
       
    88             job.stop()
       
    89         except:
       
    90             raise NoID(id)
       
    91         job.stop()
       
    92 
       
    93     
       
    94     def startSMS(self, message, recipients, provider="default"):
       
    95         u'''Versendet eine SMS.
       
    96 
       
    97         Keywords:
       
    98         message[string]: Nachricht
       
    99         recipients[list]: eine Liste von Emfänger-Nummern (gemäß ITU-T E.123)
       
   100         provider[string]: Provider über den geschickt werden soll
       
   101 
       
   102         Return:
       
   103         id[hash]: Die ID des Auftrages
       
   104 
       
   105         '''
       
   106         if not "sms" in self.features:
       
   107             raise NotSupportedFeature("sms")
       
   108         id = self.jobqueue.newSMS(message,recipients,provider,user=self.name)
       
   109         self.jobs[id]=self.jobqueue[id]
       
   110         return id
       
   111     
       
   112     
       
   113     def startFAX(self, subject, fax, recipients, provider="default"):
       
   114         u'''Versendet ein FAX.
       
   115 
       
   116         Keywords:
       
   117         subject[string]: der Betreff
       
   118         fax[string]: das pdf base64 kodiert
       
   119         recipients[list]: eine Liste von Emfänger-Nummern (gemäß ITU-T E.123)
       
   120         provider[string]: Provider über den geschickt werden soll
       
   121 
       
   122         Return:
       
   123         id[hash]: Die ID des Auftrages
       
   124 
       
   125         '''
       
   126         logger.debug("startFAX(%s,%s,%s,%s)"%(subject, fax, recipients, provider))
       
   127         if not "fax" in self.features:
       
   128             raise NotSupportedFeature("fax")
       
   129         
       
   130         if type(fax) != list:
       
   131             fax=[fax]
       
   132         f=[i.data for i in fax]
       
   133 
       
   134         id = self.jobqueue.newFAX(subject, f,recipients,provider,user=self.name)
       
   135         self.jobs[id]=self.jobqueue[id]
       
   136         return id
       
   137 
       
   138     def startMail(self, subject,  body, recipients, frm, provider="default"):
       
   139         u'''Versendet eine Email.
       
   140 
       
   141         Keywords:
       
   142         subject[string]: der Betreff
       
   143         body[string]: der Email Body
       
   144         recipients[list]: eine Liste von Emailadressen
       
   145         frm[string]: Die Absender Emailadresse
       
   146         provider[string]: Provider über den geschickt werden soll
       
   147 
       
   148         Return:
       
   149         id[hash]: Die ID des Auftrages
       
   150 
       
   151         '''
       
   152         if not "mail" in self.features:
       
   153             raise NotSupportedFeature("mail")
       
   154         logger.debug("startMail(%s,%s,%s,%s,%s)"%(subject, body, recipients, frm, provider))
       
   155         id = self.jobqueue.newMail(subject, body, recipients, frm,  provider,user=self.name)
       
   156         self.jobs[id]=self.jobqueue[id]
       
   157         return id    
       
   158        
       
   159     def getProvider(self, typ):
       
   160         u'''Gibt eine Liste aller verfügbaren Provider zurück.
       
   161 
       
   162         Keywords:
       
   163         typ[string]: Der Typ zu dem die Providerloste ausgeben werden soll
       
   164                      Einer der Liste ["sms","fax","mail"]
       
   165 
       
   166         Return:
       
   167         providerlist[list]: Eine Liste aller möglichen Provider
       
   168 
       
   169         '''
       
   170         if not typ in self.features:
       
   171             raise NotSupportedFeature(typ)
       
   172        
       
   173         return self.jobqueue.providerlist.getProviderlist(typ)
       
   174         
       
   175     def getDefaultProvider(self, typ):
       
   176         u'''Gibt den Standardprovider zurück.
       
   177  
       
   178         Keywords:
       
   179         typ[string]: Der Typ zu dem die Providerloste ausgeben werden soll
       
   180                      Einer der Liste ["sms","fax","mail"]
       
   181 
       
   182         Return:
       
   183         provider[string]: Der Standardprovider für den angeben Typ
       
   184 
       
   185 
       
   186         '''
       
   187         if not typ in self.features:
       
   188             raise NotSupportedFeature(typ)
       
   189        
       
   190         return self.jobqueue.providerlist.getDefault(typ)["name"]
       
   191         
       
   192 class Admin(User):
       
   193     def __init__(self, name, jobqueue):
       
   194         User.__init__(self, name, jobqueue)
       
   195         self.jobs=jobqueue.jobs