|
@@ -0,0 +1,57 @@
|
|
|
+# -*- coding: utf-8 -*-
|
|
|
+"""
|
|
|
+Feed Summary
|
|
|
+============
|
|
|
+
|
|
|
+This plugin allows summaries to be used in feeds instead of the full length article.
|
|
|
+"""
|
|
|
+
|
|
|
+from __future__ import unicode_literals
|
|
|
+
|
|
|
+from jinja2 import Markup
|
|
|
+
|
|
|
+import six
|
|
|
+if not six.PY3:
|
|
|
+ from urlparse import urlparse
|
|
|
+else:
|
|
|
+ from urllib.parse import urlparse
|
|
|
+
|
|
|
+from pelican import signals
|
|
|
+from pelican.writers import Writer
|
|
|
+from pelican.utils import set_date_tzinfo
|
|
|
+
|
|
|
+from .magic_set import magic_set
|
|
|
+
|
|
|
+class FeedSummaryWriter(Writer):
|
|
|
+ def _add_item_to_the_feed(self, feed, item):
|
|
|
+ if self.settings['FEED_USE_SUMMARY']:
|
|
|
+ title = Markup(item.title).striptags()
|
|
|
+ link = '%s/%s' % (self.site_url, item.url)
|
|
|
+ feed.add_item(
|
|
|
+ title=title,
|
|
|
+ link=link,
|
|
|
+ unique_id='tag:%s,%s:%s' % (urlparse(link).netloc,
|
|
|
+ item.date.date(),
|
|
|
+ urlparse(link).path.lstrip('/')),
|
|
|
+ description=item.summary if hasattr(item, 'summary') else item.get_content(self.site_url),
|
|
|
+ categories=item.tags if hasattr(item, 'tags') else None,
|
|
|
+ author_name=getattr(item, 'author', ''),
|
|
|
+ pubdate=set_date_tzinfo(item.modified if hasattr(item, 'modified') else item.date,
|
|
|
+ self.settings.get('TIMEZONE', None)))
|
|
|
+ else:
|
|
|
+ super(FeedSummaryWriter, self)._add_item_to_the_feed(feed, item)
|
|
|
+
|
|
|
+def set_feed_use_summary_default(pelican_object):
|
|
|
+ # modifying DEFAULT_CONFIG doesn't have any effect at this point in pelican setup
|
|
|
+ # everybody who uses DEFAULT_CONFIG is already used/copied it or uses the pelican_object.settings copy.
|
|
|
+
|
|
|
+ pelican_object.settings.setdefault('FEED_USE_SUMMARY', False)
|
|
|
+
|
|
|
+def patch_pelican_writer(pelican_object):
|
|
|
+ @magic_set(pelican_object)
|
|
|
+ def get_writer(self):
|
|
|
+ return FeedSummaryWriter(self.output_path,settings=self.settings)
|
|
|
+
|
|
|
+def register():
|
|
|
+ signals.initialized.connect(set_feed_use_summary_default)
|
|
|
+ signals.initialized.connect(patch_pelican_writer)
|