iro/job.py
author Sandro Knauß <knauss@netzguerilla.net>
Thu, 26 Jan 2012 01:20:03 +0100
branchdevel
changeset 111 8b493ab9c74f
parent 55 ae3669fef3b0
permissions -rw-r--r--
userhash -> apikey fpr better Exception description

# -*- 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/>.

class Job(object):
    '''
    Basic class for all jobs
    '''   
    def __init__(self,providerlist,provider, name):
        self.providerlist=providerlist
        self.provider=provider
        self.name=name
        self.status = "init"
        self.dStatus={"good":[], "failed":[]}
        self.id=None
        self.acounting=None
   
    def setAcounting(self,ac):
        self.acounting=ac

    def setId(self, id):
        self.id=id
        if self.acounting:
            self.acounting.setId(id)

    def start(self,indifier=None):
        self.indifier=indifier
        self.status = "started"
        
    def stop(self):
        self.status = "stopped"

    def setLog(self,log):
        self.log=log
        
    def getStatus(self,detailed=False):
        if detailed and self.status == "started" or self.status == "sended":
            return self.status, self.dStatus
        return self.status,{}
    
    def setStatus(self,status):
        self.status=status

    def getName(self):
        return self.name
        
    def getProvider(self):
        return None
        
    def addGood(self, good):
        if self.acounting:
            self.acounting.addGood(good)
        if type(good) == list:
            self.dStatus['good']=self.dStatus['good']+good
        else:
            self.dStatus['good'].append(good)
    
    def addFailed(self, failed):
        if self.acounting:
            self.acounting.addFailed(failed)
        if type(failed) == list:
            self.dStatus['failed']=self.dStatus['failed']+failed
        else:
            self.dStatus['failed'].append(failed)

class MessageJob(Job):
    '''
    A specialized class for smsjobs
    '''
    def __init__(self,providerlist,provider, name, message,recipients):
        self.message=message
        self.recipients=recipients
        Job.__init__(self,providerlist,provider,  name)
        
    def stop(self):
        pass
    
    def start(self, id=None):
        Job.start(self,id)
        self.getProvider().setJob(self)
        self.message.sendto(self.getProvider(), self.recipients)
        self.status="sended"

    def getMessage(self):
        return self.message
        
    def getRecipients(self):
        return self.recipients


class SMSJob(MessageJob):
    def __init__(self,providerlist,provider, name, message,recipients):
        MessageJob.__init__(self,providerlist,provider, name, message,recipients)
        
    def getProvider(self):
        return self.providerlist.getProvider("sms", self.provider)

class FAXJob(MessageJob):
    def __init__(self,providerlist,provider, name, message,recipients):
        MessageJob.__init__(self,providerlist,provider, name, message,recipients)
        
    def getProvider(self):
        return self.providerlist.getProvider("fax", self.provider)

class MailJob(MessageJob):
    def __init__(self,providerlist,provider, name, message,recipients):
        MessageJob.__init__(self,providerlist,provider, name, message,recipients)
        
    def getProvider(self):
        return self.providerlist.getProvider("mail", self.provider)