Don't toss old entries when an RSS feed is down.
authorEevee <git@veekun.com>
Mon, 9 Aug 2010 03:36:01 +0000 (20:36 -0700)
committerEevee <git@veekun.com>
Mon, 9 Aug 2010 03:36:01 +0000 (20:36 -0700)
splinext/frontpage/sources.py

index eaefc57..e28dc38 100644 (file)
@@ -6,6 +6,7 @@ from collections import namedtuple
 import datetime
 import subprocess
 from subprocess import PIPE
 import datetime
 import subprocess
 from subprocess import PIPE
+from urllib2 import URLError
 
 import feedparser
 import lxml.html
 
 import feedparser
 import lxml.html
@@ -119,8 +120,13 @@ class CachedSource(Source):
             # Too early!
             return
 
             # Too early!
             return
 
-        updates = self._poll(self.limit, self.max_age)
-        cache.get_cache('spline-frontpage')[self.cache_key()] = updates
+        try:
+            updates = self._poll(self.limit, self.max_age)
+            cache.get_cache('spline-frontpage')[self.cache_key()] = updates
+        except Exception:
+            # Hmm, polling broke.  Be conservative and don't do anything; old
+            # data is probably still OK for now
+            pass
 
         return
 
 
         return
 
@@ -161,6 +167,11 @@ class FeedSource(CachedSource):
     def _poll(self, limit, max_age):
         feed = feedparser.parse(self.feed_url)
 
     def _poll(self, limit, max_age):
         feed = feedparser.parse(self.feed_url)
 
+        if feed.bozo and isinstance(feed.bozo_exception, URLError):
+            # Feed is DOWN.  Bail here; otherwise, old entries might be lost
+            # just because, say, Bulbanews is down yet again
+            raise feed.bozo_exception
+
         if not self.title:
             self.title = feed.feed.title
 
         if not self.title:
             self.title = feed.feed.title