iro/user.py
author Sandro Knauß <knauss@netzguerilla.net>
Mon, 30 Jan 2012 21:36:12 +0100
branchdevel
changeset 128 1a3ebdd3bdaf
parent 76 9f7da8dc8df8
permissions -rw-r--r--
telnumber test in own file

# -*- coding: utf-8 -*-
#Copyright (C) 2009  Sandro Knauß <bugs@sandroknauss.de>

#This program is free software; you can redistribute it and/or modify it under the terms
#of the GNU General Public License as published by the Free Software Foundation;
#either version 3 of the License, or any later version.
#This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
#without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
#See the GNU General Public License for more details.

#You should have received a copy of the GNU General Public License
#along with this program; if not, see <http://www.gnu.org/licenses/>.
import logging
logger=logging.getLogger("iro.user")
class NotSupportedFeature (Exception):
    def __init__(self,name):
        self.name=name
    
    def __str__(self):
        return ("This is not a supported feature:", self.name)

class NoID(Exception):
    def __init__(self,i):
        self.i=i
    
    def __str__(self):
        return ("No Job with id:", self.i)


class User: 
    '''class for a xmlrpc user
    '''
    def __init__(self, name, jobqueue):
        self.jobqueue=jobqueue
        self.jobs={}
        self.name=name
        self.features=["mail", "sms", "fax", ]

    def status(self,id=None,detailed=False):
        '''Gibt den aktuellen Status eines Auftrages zurück.

        Keywords:
        id[hash]: Eine Auftragsnummer
        detailed[boolean]: Details ausgeben

        Return:
        jobs[list]: Eine Liste der Aufträge.
        job.name[string]: Angebener Name
        job.status[string]: Status des Auftrages


        '''
        try:
            jobs={}
            if id==None:
                jobs=self.jobs
            else:
                try:
                    jobs={id:self.jobs[id]}
                except:
                    logger.error("No Job ID %s",id)
                    #raise NoID(id)
            ret={}
            if not jobs:
                return {}

            for key in jobs:
                job=jobs[key]
                ret[key]={"name":job.getName(),"status":job.getStatus(detailed)}
            
            return ret
        except:
            logger.exception("Fehler in iro.user.status")
            return {}

    def stop(self,id):
        '''Stoppt den angegeben Auftrag.

        Keywords:
        id[hash]: Eine Auftragsnummer

        Return:

        '''
        try:
            job=self.jobs[id]
            job.stop()
        except:
            raise NoID(id)
        job.stop()

    
    def startSMS(self, message, recipients, provider="default"):
        '''Versendet eine SMS.

        Keywords:
        message[string]: Nachricht
        recipients[list]: eine Liste von Emfänger-Nummern (gemäß ITU-T E.123)
        provider[string]: Provider über den geschickt werden soll

        Return:
        id[hash]: Die ID des Auftrages

        '''
        if not "sms" in self.features:
            raise NotSupportedFeature("sms")
        id = self.jobqueue.newSMS(message,recipients,provider,user=self.name)
        self.jobs[id]=self.jobqueue[id]
        return id
    
    
    def startFAX(self, subject, fax, recipients, provider="default"):
        '''Versendet ein FAX.

        Keywords:
        subject[string]: der Betreff
        fax[string]: das pdf base64 kodiert
        recipients[list]: eine Liste von Emfänger-Nummern (gemäß ITU-T E.123)
        provider[string]: Provider über den geschickt werden soll

        Return:
        id[hash]: Die ID des Auftrages

        '''
        logger.debug("startFAX(%s,%s,%s,%s)"%(subject, fax, recipients, provider))
        if not "fax" in self.features:
            raise NotSupportedFeature("fax")
        
        if type(fax) != list:
            fax=[fax]
        f=[i.data for i in fax]

        id = self.jobqueue.newFAX(subject, f,recipients,provider,user=self.name)
        self.jobs[id]=self.jobqueue[id]
        return id

    def startMail(self, subject,  body, recipients, frm, provider="default"):
        '''Versendet eine Email.

        Keywords:
        subject[string]: der Betreff
        body[string]: der Email Body
        recipients[list]: eine Liste von Emailadressen
        frm[string]: Die Absender Emailadresse
        provider[string]: Provider über den geschickt werden soll

        Return:
        id[hash]: Die ID des Auftrages

        '''
        if not "mail" in self.features:
            raise NotSupportedFeature("mail")
        logger.debug("startMail(%s,%s,%s,%s,%s)"%(subject, body, recipients, frm, provider))
        id = self.jobqueue.newMail(subject, body, recipients, frm,  provider,user=self.name)
        self.jobs[id]=self.jobqueue[id]
        return id    
       
    def getProvider(self, typ):
        '''Gibt eine Liste aller verfügbaren Provider zurück.

        Keywords:
        typ[string]: Der Typ zu dem die Providerloste ausgeben werden soll
                     Einer der Liste ["sms","fax","mail"]

        Return:
        providerlist[list]: Eine Liste aller möglichen Provider

        '''
        if not typ in self.features:
            raise NotSupportedFeature(typ)
       
        return self.jobqueue.providerlist.getProviderlist(typ)
        
    def getDefaultProvider(self, typ):
        '''Gibt den Standardprovider zurück.
 
        Keywords:
        typ[string]: Der Typ zu dem die Providerloste ausgeben werden soll
                     Einer der Liste ["sms","fax","mail"]

        Return:
        provider[string]: Der Standardprovider für den angeben Typ


        '''
        if not typ in self.features:
            raise NotSupportedFeature(typ)
       
        return self.jobqueue.providerlist.getDefault(typ)["name"]
        
class Admin(User):
    def __init__(self, name, jobqueue):
        User.__init__(self, name, jobqueue)
        self.jobs=jobqueue.jobs