Mercurial > hg > Feedworm
diff backend/AbstractFeedUpdater.py @ 166:04c3b9796b89
feedparser uses the proxy now if one is configured. To implement this the FeedUpdater had to change a bit - sqlalchemy backend is not yet refactored.
author | dirk |
---|---|
date | Sat, 03 Sep 2011 04:12:35 +0200 |
parents | 86f828096aaf |
children | a3c945ce434c |
line wrap: on
line diff
--- a/backend/AbstractFeedUpdater.py Mon Aug 29 04:12:01 2011 +0200 +++ b/backend/AbstractFeedUpdater.py Sat Sep 03 04:12:35 2011 +0200 @@ -2,6 +2,7 @@ from datetime import datetime import feedparser import logging +from urllib2 import ProxyHandler STATUS_ERROR = 400 log = logging.getLogger("FeedUpdater") @@ -12,19 +13,28 @@ Subclasses need to implement creating and storing the new feed entries. ''' - def __init__(self, feed): - self.feed = feed + @staticmethod + def parseFeed(url): + proxy = ProxyHandler( {"http":"http://your.proxy.here:8080/"} ) + return feedparser.parse(url, handlers = [proxy]) - def update(self, feedDict=None): - log.info("updating " + self.feed.rss_url) - if feedDict is None: - result = self._retrieveFeed() - else: - result = feedDict + def __init__(self, preferences): + self.preferences = preferences + + def update(self, feed): + self.feed = feed + log.info("updating " + feed.rss_url) + result = self._retrieveFeed() self._processEntries(result) + self._setFeedTitle(result) def _retrieveFeed(self): - result = feedparser.parse(self.feed.rss_url) + if self.preferences.isProxyConfigured(): + proxyUrl = "http://%s:%i" % (self.preferences.proxyHost(), self.preferences.proxyPort()) + proxyHandler = ProxyHandler({"http" : proxyUrl}) + result = feedparser.parse(self.feed.rss_url, handlers=[proxyHandler]) + else: + result = feedparser.parse(self.feed.rss_url) # bozo flags if a feed is well-formed. # if result["bozo"] > 0: # raise FeedUpdateException() @@ -58,6 +68,13 @@ def _incrementFeedUpdateDate(self): raise Exception("_incrementNextUpdateDate is abstract, subclasses must override") + def _setFeedTitle(self, feedDict): + if self.feed.title is None: + if feedDict.feed.has_key("title"): + self.feed.title = feedDict.feed.title + else: + self.feed.title = self.feed.rss_url + class FeedUpdateException(Exception): pass