Merge pull request #238 from draftcode/feed_issue

Do not create feeds when their filenames are set to None.
This commit is contained in:
Alexis Metaireau 2012-03-11 01:46:58 -08:00
commit 78091bfa80
3 changed files with 63 additions and 20 deletions

View file

@ -208,7 +208,6 @@ Pelican generates category feeds as well as feeds for all your articles. It does
not generate feeds for tags by default, but it is possible to do so using not generate feeds for tags by default, but it is possible to do so using
the ``TAG_FEED`` and ``TAG_FEED_RSS`` settings: the ``TAG_FEED`` and ``TAG_FEED_RSS`` settings:
================================================ ===================================================== ================================================ =====================================================
Setting name (default value) What does it do? Setting name (default value) What does it do?
================================================ ===================================================== ================================================ =====================================================
@ -223,6 +222,9 @@ Setting name (default value) What does it do?
quantity is unrestricted by default. quantity is unrestricted by default.
================================================ ===================================================== ================================================ =====================================================
If you don't want to generate some of these feeds, set ``None`` to the
variables above.
.. [2] %s is the name of the category. .. [2] %s is the name of the category.
Pagination Pagination

View file

@ -118,41 +118,46 @@ class ArticlesGenerator(Generator):
def generate_feeds(self, writer): def generate_feeds(self, writer):
"""Generate the feeds from the current context, and output files.""" """Generate the feeds from the current context, and output files."""
writer.write_feed(self.articles, self.context, self.settings['FEED']) if self.settings.get('FEED'):
if 'FEED_RSS' in self.settings:
writer.write_feed(self.articles, self.context, writer.write_feed(self.articles, self.context,
self.settings['FEED_RSS'], feed_type='rss') self.settings['FEED'])
if self.settings.get('FEED_RSS'):
writer.write_feed(self.articles, self.context,
self.settings['FEED_RSS'], feed_type='rss')
for cat, arts in self.categories: for cat, arts in self.categories:
arts.sort(key=attrgetter('date'), reverse=True) arts.sort(key=attrgetter('date'), reverse=True)
writer.write_feed(arts, self.context, if self.settings.get('CATEGORY_FEED'):
self.settings['CATEGORY_FEED'] % cat)
if 'CATEGORY_FEED_RSS' in self.settings:
writer.write_feed(arts, self.context, writer.write_feed(arts, self.context,
self.settings['CATEGORY_FEED_RSS'] % cat, self.settings['CATEGORY_FEED'] % cat)
feed_type='rss')
if 'TAG_FEED' in self.settings: if self.settings.get('CATEGORY_FEED_RSS'):
writer.write_feed(arts, self.context,
self.settings['CATEGORY_FEED_RSS'] % cat,
feed_type='rss')
if self.settings.get('TAG_FEED') or self.settings.get('TAG_FEED_RSS'):
for tag, arts in self.tags.items(): for tag, arts in self.tags.items():
arts.sort(key=attrgetter('date'), reverse=True) arts.sort(key=attrgetter('date'), reverse=True)
writer.write_feed(arts, self.context, if self.settings.get('TAG_FEED'):
self.settings['TAG_FEED'] % tag) writer.write_feed(arts, self.context,
self.settings['TAG_FEED'] % tag)
if 'TAG_FEED_RSS' in self.settings: if self.settings.get('TAG_FEED_RSS'):
writer.write_feed(arts, self.context, writer.write_feed(arts, self.context,
self.settings['TAG_FEED_RSS'] % tag, self.settings['TAG_FEED_RSS'] % tag,
feed_type='rss') feed_type='rss')
translations_feeds = defaultdict(list) if self.settings.get('TRANSLATION_FEED'):
for article in chain(self.articles, self.translations): translations_feeds = defaultdict(list)
translations_feeds[article.lang].append(article) for article in chain(self.articles, self.translations):
translations_feeds[article.lang].append(article)
for lang, items in translations_feeds.items(): for lang, items in translations_feeds.items():
items.sort(key=attrgetter('date'), reverse=True) items.sort(key=attrgetter('date'), reverse=True)
writer.write_feed(items, self.context, writer.write_feed(items, self.context,
self.settings['TRANSLATION_FEED'] % lang) self.settings['TRANSLATION_FEED'] % lang)
def generate_pages(self, writer): def generate_pages(self, writer):
"""Generate the pages on the disk""" """Generate the pages on the disk"""

36
tests/test_generators.py Normal file
View file

@ -0,0 +1,36 @@
# -*- coding: utf-8 -*-
from __future__ import with_statement
try:
from unittest2 import TestCase
except ImportError, e:
from unittest import TestCase
from pelican.generators import ArticlesGenerator
from pelican.settings import _DEFAULT_CONFIG
class TestArticlesGenerator(TestCase):
def test_generate_feeds(self):
class FakeWriter(object):
def __init__(self):
self.called = False
def write_feed(self, *args, **kwargs):
self.called = True
generator = ArticlesGenerator(None, {'FEED': _DEFAULT_CONFIG['FEED']},
None, _DEFAULT_CONFIG['THEME'], None,
None)
writer = FakeWriter()
generator.generate_feeds(writer)
assert writer.called, ("The feed should be written, "
"if settings['FEED'] is specified.")
generator = ArticlesGenerator(None, {'FEED': None}, None,
_DEFAULT_CONFIG['THEME'], None, None)
writer = FakeWriter()
generator.generate_feeds(writer)
assert not writer.called, ("If settings['FEED'] is None, "
"the feed should not be generated.")