Mercurial > hg > Feedworm
changeset 9:fd4c8bfa62d6
FeedUpdater throws an exception if the URL could not be retrieved successfully. Includes unit tests.
author | Dirk Olmes <dirk@xanthippe.ping.de> |
---|---|
date | Tue, 27 Apr 2010 10:22:35 +0200 |
parents | 2da2b691345d |
children | 01a86b178e60 |
files | FeedUpdater.py tests/FeedUpdaterTests.py tests/__init__.py |
diffstat | 2 files changed, 36 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/FeedUpdater.py Tue Apr 27 03:42:08 2010 +0200 +++ b/FeedUpdater.py Tue Apr 27 10:22:35 2010 +0200 @@ -4,6 +4,8 @@ from FeedEntry import FeedEntry import feedparser +STATUS_OK = 200 + def updateAllFeeds(session): allFeeds = session.query(Feed) for feed in allFeeds: @@ -16,10 +18,16 @@ self.feed = feed def update(self): - result = feedparser.parse(self.feed.rss_url) + result = self.getFeed() for entry in result.entries: self.processEntry(entry) + def getFeed(self): + result = feedparser.parse(self.feed.rss_url) + if result["status"] is not STATUS_OK: + raise FeedUpdateException() + return result + def processEntry(self, entry): feedEntry = FeedEntry.findById(entry.id, self.session) if feedEntry is None: @@ -34,3 +42,6 @@ new.summary = entry.summary new.feed = self.feed self.session.add(new) + +class FeedUpdateException(Exception): + pass \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/FeedUpdaterTests.py Tue Apr 27 10:22:35 2010 +0200 @@ -0,0 +1,24 @@ + +import unittest +from Feed import Feed +from FeedUpdater import FeedUpdater +from FeedUpdater import FeedUpdateException + +class FeedUpdaterTests(unittest.TestCase): + def testFeedContainsInvalidUrl(self): + feed = Feed("invalid", "http://thisurldoesnotexist.xxx") + try: + FeedUpdater(None, feed).update() + self.fail("updating an invalid URL must fail") + except FeedUpdateException: + # this one was expected + pass + + def testFeedContainsValidUrl(self): + feed = Feed("valid", "http://www.joelonsoftware.com/rss.xml") + result = FeedUpdater(None, feed).getFeed() + self.assertEqual("Joel on Software", result["feed"].title) + +if __name__ == "__main__": + #import sys;sys.argv = ['', 'Test.testName'] + unittest.main() \ No newline at end of file