Skip to content

Commit

Permalink
Do not create feeds when their filenames are set to None.
Browse files Browse the repository at this point in the history
  • Loading branch information
draftcode committed Mar 10, 2012
1 parent a7ea166 commit 1194764
Show file tree
Hide file tree
Showing 3 changed files with 63 additions and 20 deletions.
4 changes: 3 additions & 1 deletion docs/settings.rst
Expand Up @@ -199,7 +199,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?
================================================ ===================================================== ================================================ =====================================================
Expand All @@ -214,6 +213,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
Expand Down
43 changes: 24 additions & 19 deletions pelican/generators.py
Expand Up @@ -118,41 +118,46 @@ def __init__(self, *args, **kwargs):
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'):
writer.write_feed(self.articles, self.context,
self.settings['FEED'])


if 'FEED_RSS' in self.settings: if self.settings.get('FEED_RSS'):
writer.write_feed(self.articles, self.context, writer.write_feed(self.articles, self.context,
self.settings['FEED_RSS'], feed_type='rss') 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) writer.write_feed(arts, self.context,
self.settings['CATEGORY_FEED'] % cat)


if 'CATEGORY_FEED_RSS' in self.settings: if self.settings.get('CATEGORY_FEED_RSS'):
writer.write_feed(arts, self.context, writer.write_feed(arts, self.context,
self.settings['CATEGORY_FEED_RSS'] % cat, self.settings['CATEGORY_FEED_RSS'] % cat,
feed_type='rss') feed_type='rss')


if 'TAG_FEED' in self.settings: 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"""
Expand Down
36 changes: 36 additions & 0 deletions tests/test_generators.py
@@ -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.")

0 comments on commit 1194764

Please sign in to comment.