예제 #1
0
class MailingList:
    
    def __init__(self, config, lang=None):
        """
        Constructor method
        """
        
        self.config = config
        self.lang = lang
        self.subscribers = Subscribers(config)
        self.index = Index(self.config)
        
    def __createDir(self):
        if not (os.path.exists(self.config.get('dir'))):
            os.mkdir(self.config.get('dir'))
        
    def __parse(self):
        """
        Parse mailingg list and load all
        indexes into memory
        """
        
        previous = None
        
        mbox = Mbox(self.config.get('mbox'))
        messages = 0
        message = mbox.nextMessage()
        
        while(message != None):
            #fisrt load message
            messages += 1
            msg = Message(message, self.config)
            
            #index it
            self.index.add(msg)
            self.subscribers.add(msg)
            subscriber = self.subscribers.get(msg.getFromMail())
            msg.setSender(subscriber)
            
            #parent message (refactor)
            inReplyTo = msg.getInReplyTo()
            if (inReplyTo != None):
                parent = self.index.get(inReplyTo)
                if (parent != None):
                    msg.setParent(parent) #link child with parent
                    parent.addChild(msg) #and parent with child
                    
            #and previous and next by date
            if (previous != None):
                previous.setNextByDate(msg)
                msg.setPreviousByDate(previous)
            
            previous = msg
            
            #and continue with next message
            message = mbox.nextMessage()

        self.messages = messages
    
    def publish(self):
        """
        Publish the messages
        """
        
        self.__createDir()
        
        #fisrt lap
        self.__parse()
        
        #and second lap
        mbox = Mbox(self.config.get('mbox'))
        messages = 0

        message = mbox.nextMessage()
        
        try: 
            
            while(message != None):
                messages += 1
                id = message['Message-Id']
                msg = self.index.getMessage(messages)
                
                if (msg != None and msg.getMessageId() == id):
                    msg.setBody('FIXME')
                    msg.toRDF()
                    #msg.toHTML()
                    #self.index.delete(id)
                else:
                    print 'Someone was wrong with message ' + str(messages) + ' with ID ' + id + ' ('+msg.getMessageId()+')'

                message = mbox.nextMessage()
                
            self.__toRDF()
    
            self.subscribers.process()
            self.subscribers.export()
            
        except Exception, detail:
            print str(detail)
            
        
        if (self.messages != messages):
            print 'Something was wrong: ' + str(self.messages) + ' parsed, but ' + str(messages) + ' processed'

        return messages
예제 #2
0
class MailingList:
    """
    Mailing List abstraction
    """
    def __init__(self, config, lang=None):
        """
        Constructor method
        
        @param config: configuration
        @param lang: language
        """

        self.config = config
        self.lang = lang
        self.subscribers = Subscribers(config)
        self.index = Index(self.config)

    def __createDir(self):
        """
        Create the necessary directory
        """

        if not (os.path.exists(self.config.get('dir'))):
            os.mkdir(self.config.get('dir'))

    def __parse(self):
        """
        Parse mailingg list and load all indexes into memory
        """

        previous = None

        mbox = Mbox(self.config.get('mbox'))
        messages = 0
        message = mbox.nextMessage()

        while (message != None):
            #fisrt load message
            messages += 1
            msg = Message(message, self.config)

            #index it
            self.index.add(msg)
            self.subscribers.add(msg)
            subscriber = self.subscribers.get(msg.getFromMail())
            msg.setSender(subscriber)

            #parent message (refactor)
            inReplyTo = msg.getInReplyTo()
            if (inReplyTo != None):
                parent = self.index.get(inReplyTo)
                if (parent != None):
                    msg.setParent(parent)  #link child with parent
                    parent.addChild(msg)  #and parent with child

            #and previous and next by date
            if (previous != None):
                previous.setNextByDate(msg)
                msg.setPreviousByDate(previous)

            previous = msg

            #and continue with next message
            message = mbox.nextMessage()

        self.messages = messages

    def publish(self):
        """
        Publish the messages
        """

        self.__createDir()

        #fisrt lap
        self.__parse()

        #and second lap
        mbox = Mbox(self.config.get('mbox'))
        messages = 0

        message = mbox.nextMessage()

        try:

            while (message != None):
                messages += 1
                id = message['Message-Id']
                msg = self.index.getMessage(messages)

                if (msg != None and msg.getMessageId() == id):
                    msg.setBody(message.fp.read())
                    msg.toRDF()
                    #msg.toHTML()
                    #self.index.delete(id)
                else:
                    print 'Someone was wrong with message ' + str(
                        messages) + ' with ID ' + id + ' (' + msg.getMessageId(
                        ) + ')'

                message = mbox.nextMessage()

            self.__toRDF()

            if (self.config.get('foaf')):
                self.subscribers.process()

            self.subscribers.export()

        except Exception, detail:
            print str(detail)

        if (self.messages != messages):
            print 'Something was wrong: ' + str(
                self.messages) + ' parsed, but ' + str(messages) + ' processed'

        return messages