X-Git-Url: http://git.veekun.com/zzz-spline-frontpage.git/blobdiff_plain/f3fc85523d8288c4eb352bf9836660fe4a67781b..e1e19c27da0c22e6b65a6e245f53f8a26739778e:/splinext/frontpage/sources.py diff --git a/splinext/frontpage/sources.py b/splinext/frontpage/sources.py index dc97bf3..e28dc38 100644 --- a/splinext/frontpage/sources.py +++ b/splinext/frontpage/sources.py @@ -6,6 +6,7 @@ from collections import namedtuple import datetime import subprocess from subprocess import PIPE +from urllib2 import URLError import feedparser import lxml.html @@ -21,8 +22,10 @@ def max_age_to_datetime(max_age): if max_age == None: return None - seconds = int(max_age) + dt = datetime.datetime.now() + dt -= datetime.timedelta(seconds=int(max_age)) + return dt class Source(object): @@ -117,8 +120,13 @@ class CachedSource(Source): # 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 @@ -159,6 +167,11 @@ class FeedSource(CachedSource): 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