import feedgenerator
from urllib import quote_plus
import os.path
+import re
+ import directives
#global
feed_entries = None
"""
from sphinx.application import Sphinx
if not isinstance(app, Sphinx): return
+ app.add_config_value('feed_title', '', 'html')
app.add_config_value('feed_base_url', '', 'html')
app.add_config_value('feed_description', '', 'html')
- app.add_config_value('feed_filename', 'rss.xml', 'html')
-
+ app.add_config_value('feed_title', '', 'html')
+ app.add_config_value('feed_subtitle', '', 'html')
+ app.add_config_value('feed_author_name', '', 'html')
+ app.add_config_value('feed_author_email', '', 'html')
+ app.add_config_value('feed_categories', [], 'html')
+ app.add_config_value('feed_variants',
+ {'all': {'filename': 'rss.xml', 'categories': None}},
+ 'html')
app.connect('html-page-context', create_feed_item)
- app.connect('html-page-context', inject_feed_url)
app.connect('build-finished', emit_feed)
app.connect('builder-inited', create_feed_container)
app.connect('env-purge-doc', remove_dead_feed_item)
global feed_entries
rss_fragment_path = os.path.realpath(os.path.join(app.outdir, '..', 'rss_entry_fragments'))
feed_entries = FSDict(work_dir=rss_fragment_path)
- app.builder.env.feed_url = app.config.feed_base_url + '/' + 'feed_container'
+ app.builder.env.feed_url = app.config.feed_base_url + '/' + \
+ app.config.feed_filename
+def inject_feed_url(app, pagename, templatename, ctx, doctree):
+ #We like to provide our templates with a way to link to the rss output file
+ ctx['rss_link'] = app.builder.env.feed_url #app.config.feed_base_url + '/' + app.config.feed_filename
+
++
def create_feed_item(app, pagename, templatename, ctx, doctree):
"""
Here we have access to nice HTML fragments to use in, say, an RSS feed.
'title': ctx.get('title'),
'link': link,
'unique_id': link,
- 'description': absolutify(ctx.get('body'), link),
- 'pubdate': pub_date
+ 'description': absolutify(body, link),
+ 'pubdate': pub_date,
+ 'categories': ()
}
+ if 'tags' in metadata:
+ item['categories'] = metadata['tags'].split(",")
if 'author' in metadata:
- item['author'] = metadata['author']
- feed_entries[nice_name(pagename, pub_date)] = item
+ item['author_name'] = metadata['author']
+ else:
+ item['author_name'] = app.config.feed_author_name
+ if 'author_email' in metadata:
+ item['author_email'] = metadata['author_email']
+ else:
+ item['author_email'] = app.config.feed_author_email
+ feed_entries[nice_name(pagename, pub_date)] = item
+
+ #Now, useful variables to keep in context
+ ctx['rss_link'] = app.builder.env.feed_url
+ ctx['pub_date'] = pub_date
def remove_dead_feed_item(app, env, docname):
"""
global feed_entries
import os.path
+ title = app.config.feed_title
+ if not title:
+ title = app.config.project
+
feed_dict = {
- 'title': app.config.feed_title,
+ 'title': title,
+ 'subtitle': app.config.feed_subtitle,
'link': app.config.feed_base_url,
'feed_url': app.config.feed_base_url,
- 'description': app.config.feed_description
+ 'description': app.config.feed_description,
+ 'categories': app.config.feed_categories,
+ 'author_name': app.config.feed_author_name,
+ 'author_email': app.config.feed_author_email
}
if app.config.language:
feed_dict['language'] = app.config.language