Pārlūkot izejas kodu

added support for generating subcategory feeds

Alistair Magee 11 gadi atpakaļ
vecāks
revīzija
1facc9468b
2 mainītis faili ar 34 papildinājumiem un 5 dzēšanām
  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 
 under that name.
 
+Feeds can be generated for each subcategory just like categories and tags.
+
+
 ##Usage##
 
 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
 
 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,
             relative_urls=generator.settings['RELATIVE_URLS'])
     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)
         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},
-                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():
     signals.article_generator_context.connect(get_subcategories)
     signals.article_generator_finalized.connect(organize_subcategories)
-    signals.article_writer_finalized.connect(generate_subcategories)
+    signals.article_writer_finalized.connect(generate)