Move parse() to Feed.fetch().
authorW. Trevor King <wking@tremily.us>
Thu, 4 Oct 2012 16:43:40 +0000 (12:43 -0400)
committerW. Trevor King <wking@tremily.us>
Thu, 4 Oct 2012 22:51:18 +0000 (18:51 -0400)
rss2email.py

index 56f53ab41ed664c4f781c81b8ab0e26de1601fb1..b4125b88b6ac69384661864f979c3990c03dbd50 100755 (executable)
@@ -786,6 +786,28 @@ class Feed (object):
         self.name = name
         self.section = 'feed.{}'.format(self.name)
 
+    def fetch(self):
+        """Fetch and parse a feed using feedparser.
+
+        >>> feed = Feed(
+        ...    name='test-feed',
+        ...    url='http://feeds.feedburner.com/allthingsrss/hJBr')
+        >>> parsed = feed.fetch()
+        >>> parsed.status
+        200
+        """
+        if self.section in self.config:
+            config = self.config[self.section]
+        else:
+            config = self.config['DEFAULT']
+        proxy = config['proxy']
+        timeout = config.getint('feed-timeout')
+        kwargs = {}
+        if proxy:
+            kwargs['handlers'] = [_urllib_request.ProxyHandler({'http':proxy})]
+        f = TimeLimitedFunction(timeout, _feedparser.parse)
+        return f(self.url, self.etag, modified=self.modified, **kwargs)
+
 
 class Feeds (list):
     """Utility class for rss2email activity.
@@ -914,15 +936,6 @@ class Feeds (list):
             _pickle.dump(list(self), open(self.datafile, 'wb'))
 
 
-#@timelimit(FEED_TIMEOUT)
-def parse(url, etag, modified):
-    if PROXY == '':
-        return feedparser.parse(url, etag, modified)
-    else:
-        proxy = urllib2.ProxyHandler( {"http":PROXY} )
-        return feedparser.parse(url, etag, modified, handlers = [proxy])
-
-
 ### Program Functions ###
 
 def add(*args):