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