Ejemplo n.º 1
0
    def process_feed(self, hdl):
        """
        Callback to be called by HeadDownloader when the HEAD downloading
        has finished.
        """
        self.update_count_downloading(-1)
        if hdl.error:
            self.logger.info("Couldn't retrieve header '%s'. Details:\
                             \n%s" % (hdl.url, hdl.error))
            return

        for feed in self.feeds:
            if feed.url == hdl.url:
                break
        feed.last_check = datetime.now()
        try:
            result_modified = (feed.last_modified != hdl.info["last-modified"])
        except KeyError:
            result_modified = True
        # Check last_modified
        if not feed.last_modified or result_modified:
            # Download the Feed
            dl = Downloader(feed.url)
            dl.start()
            dl.join(TIMEOUT * 2)
            if dl.is_alive():
                self.logger.info("Time out while getting feed '%s'." % (dl.url))
                return

            # Check and get new entries
            new_entries = self._check_entries(feed)
            # Associate entries with feed and update 'last_modified' field
            feed.entries = new_entries
            try:
                feed.last_modified = hdl.info["last-modified"]
            except KeyError:
                # last-modified header doesn't exist
                pass