From 03104bfbc3b9221b9b559888b1c44ac803c1429d Mon Sep 17 00:00:00 2001 From: Alexander Artemenko Date: Sat, 25 Dec 2010 17:58:47 +0300 Subject: [PATCH] Feed writer was refactored to allow more granular overriding of functionality. --- pelican/writers.py | 39 ++++++++++++++++++++++++--------------- 1 file changed, 24 insertions(+), 15 deletions(-) diff --git a/pelican/writers.py b/pelican/writers.py index e71156c0..b6095d3b 100644 --- a/pelican/writers.py +++ b/pelican/writers.py @@ -11,6 +11,25 @@ class Writer(object): def __init__(self, output_path): self.output_path = output_path + def _create_new_feed(self, feed_type, context): + feed_class = Rss201rev2Feed if feed_type == 'rss' else Atom1Feed + feed = feed_class( + title=context['SITENAME'], + link=self.site_url, + feed_url=self.feed_url, + description=context.get('SITESUBTITLE', '')) + return feed + + + def _add_item_to_the_feed(self, feed, item): + feed.add_item( + title=item.title, + link='%s/%s' % (self.site_url, item.url), + description=item.content, + categories=item.tags if hasattr(item, 'tags') else None, + author_name=getattr(item, 'author', 'John Doe'), + pubdate=item.date) + def write_feed(self, elements, context, filename=None, feed_type='atom'): """Generate a feed with the list of articles provided @@ -23,23 +42,13 @@ class Writer(object): :param filename: the filename to output. :param feed_type: the feed type to use (atom or rss) """ - site_url = context.get('SITEURL', get_relative_path(filename)) + self.site_url = context.get('SITEURL', get_relative_path(filename)) + self.feed_url= '%s/%s' % (self.site_url, filename) - feed_class = Rss201rev2Feed if feed_type == 'rss' else Atom1Feed + feed = self._create_new_feed(feed_type, context) - feed = feed_class( - title=context['SITENAME'], - link=site_url, - feed_url= "%s/%s" % (site_url, filename), - description=context.get('SITESUBTITLE', '')) - for element in elements: - feed.add_item( - title=element.title, - link= "%s/%s" % (site_url, element.url), - description=element.content, - categories=element.tags if hasattr(element, "tags") else None, - author_name=getattr(element, 'author', 'John Doe'), - pubdate=element.date) + for item in elements: + self._add_item_to_the_feed(feed, item) if filename: complete_path = os.path.join(self.output_path, filename)