Browse Source

added support for generating subcategory feeds

Alistair Magee 11 years ago
parent
commit
1facc9468b
2 changed files with 34 additions and 5 deletions
  1. 13 0
      subcategory/README.md
  2. 21 5
      subcategory/subcategory.py

+ 13 - 0
subcategory/README.md

@@ -7,6 +7,9 @@ regular category or another subcategory. Subcategories with the same name but
 different parents are not the same. Their articles won't be grouped together 
 different parents are not the same. Their articles won't be grouped together 
 under that name.
 under that name.
 
 
+Feeds can be generated for each subcategory just like categories and tags.
+
+
 ##Usage##
 ##Usage##
 
 
 Subcategories are an extension to categories. Add subcategories to an article's
 Subcategories are an extension to categories. Add subcategories to an article's
@@ -49,3 +52,13 @@ url would be:
     category-slug/sub-category-slug/sub-sub-category-slug
     category-slug/sub-category-slug/sub-sub-category-slug
 
 
 with `savepath` being similar but joined using `os.path.join`
 with `savepath` being similar but joined using `os.path.join`
+
+Similarily you can save a subcategory feeds by adding one of the following 
+to your pelicanconf file
+
+    SUBCATEGORY_FEED_ATOM = 'feeds/%s.atom.xml'
+    SUBCATEGORY_FEED_RSS = 'feeds/%s.rss.xml'
+
+and this will create a feed with `fullurl` of the subcategory. Eg.
+    
+    feeds/category/subcategory.atom.xml

+ 21 - 5
subcategory/subcategory.py

@@ -63,15 +63,31 @@ def generate_subcategories(generator, writer):
     write = partial(writer.write_file,
     write = partial(writer.write_file,
             relative_urls=generator.settings['RELATIVE_URLS'])
             relative_urls=generator.settings['RELATIVE_URLS'])
     subcategory_template = generator.get_template('subcategory')
     subcategory_template = generator.get_template('subcategory')
-    for sub_cat, articles in generator.subcategories.items():
+    for subcat, articles in generator.subcategories.items():
         articles.sort(key=attrgetter('date'), reverse=True)
         articles.sort(key=attrgetter('date'), reverse=True)
         dates = [article for article in generator.dates if article in articles]
         dates = [article for article in generator.dates if article in articles]
-        write(sub_cat.save_as, subcategory_template, generator.context, 
-                subcategory=sub_cat, articles=articles, dates=dates, 
+        write(subcat.save_as, subcategory_template, generator.context, 
+                subcategory=subcat, articles=articles, dates=dates, 
                 paginated={'articles': articles, 'dates': dates},
                 paginated={'articles': articles, 'dates': dates},
-                page_name=sub_cat.page_name, all_articles=generator.articles)
+                page_name=subcat.page_name, all_articles=generator.articles)
+
+def generate_subcategory_feeds(generator, writer):
+    for subcat, articles in generator.subcategories.items():
+        articles.sort(key=attrgetter('date'), reverse=True)
+        if generator.settings.get('SUBCATEGORY_FEED_ATOM'):
+            writer.write_feed(articles, generator.context,
+                    generator.settings['SUBCATEGORY_FEED_ATOM']
+                    % subcat.fullurl)
+        if generator.settings.get('SUBCATEGORY_FEED_RSS'):
+            writer.write_feed(articles, generator.context,
+                    generator.settings['SUBCATEGORY_FEED_RSS']
+                    % subcat.fullurl, feed_type='rss')
+
+def generate(generator, writer):
+    generate_subcategory_feeds(generator, writer)
+    generate_subcategories(generator, writer)
 
 
 def register():
 def register():
     signals.article_generator_context.connect(get_subcategories)
     signals.article_generator_context.connect(get_subcategories)
     signals.article_generator_finalized.connect(organize_subcategories)
     signals.article_generator_finalized.connect(organize_subcategories)
-    signals.article_writer_finalized.connect(generate_subcategories)
+    signals.article_writer_finalized.connect(generate)