2016-01-22 00:51:21 +01:00
|
|
|
#!/usr/bin/env python2
|
|
|
|
|
|
|
|
import os
|
|
|
|
import markdown
|
|
|
|
|
2016-01-23 02:45:22 +01:00
|
|
|
from dateutil import parser
|
2016-01-22 00:51:21 +01:00
|
|
|
|
|
|
|
from verdandi.mixins.templatemixin import TemplateMixin
|
|
|
|
from verdandi.mixins.menuitemmixin import MenuItemMixin
|
2016-11-11 00:01:44 +01:00
|
|
|
from verdandi.mixins.fileassetsmixin import FileAssetsMixin
|
2016-01-22 00:51:21 +01:00
|
|
|
from verdandi.constants import CONTENT_DIRECTORY, MARKDOWN_EXTENSIONS
|
|
|
|
|
|
|
|
|
2016-04-23 00:15:49 +02:00
|
|
|
class NewsFeed(MenuItemMixin, TemplateMixin, FileAssetsMixin):
|
2016-01-22 00:51:21 +01:00
|
|
|
|
|
|
|
title = "News feed title"
|
|
|
|
template = "newsfeed.html"
|
|
|
|
feed_template = "newsfeed.rss"
|
|
|
|
feed_url = "feed.rss"
|
|
|
|
news_item_directory = "news"
|
|
|
|
news_feed_id = "news"
|
|
|
|
|
|
|
|
markdown_extensions = MARKDOWN_EXTENSIONS
|
|
|
|
content_directory = CONTENT_DIRECTORY
|
|
|
|
|
|
|
|
items = []
|
|
|
|
|
|
|
|
|
|
|
|
def process_message(self, message):
|
|
|
|
other_messages = super(NewsFeed, self).process_message(message)
|
|
|
|
|
2016-04-22 22:29:08 +02:00
|
|
|
if message == None:
|
|
|
|
self.items = []
|
|
|
|
elif message['type'] == 'news_feed_item':
|
2016-01-23 02:45:22 +01:00
|
|
|
if message['feed_id'] == self.news_feed_id:
|
|
|
|
self.items += [message['item']]
|
2016-01-22 00:51:21 +01:00
|
|
|
|
|
|
|
return other_messages
|
|
|
|
|
|
|
|
|
|
|
|
def get_context(self):
|
|
|
|
context = super(NewsFeed,self).get_context()
|
2016-11-14 23:39:58 +01:00
|
|
|
context['title'] = self.title
|
2016-01-22 00:51:21 +01:00
|
|
|
context['feed_url'] = self.feed_url
|
|
|
|
|
|
|
|
markdown_converter = markdown.Markdown(extensions = self.markdown_extensions)
|
|
|
|
|
|
|
|
rendered_items = []
|
|
|
|
for item in self.items:
|
|
|
|
item['content'] = markdown_converter.convert(item['content'])
|
2016-01-23 02:45:22 +01:00
|
|
|
rendered_items += [item]
|
2016-01-22 00:51:21 +01:00
|
|
|
|
|
|
|
item_directory = os.path.join(self.content_directory, self.news_item_directory)
|
|
|
|
for news_file in os.listdir(item_directory):
|
2016-11-15 12:06:47 +01:00
|
|
|
filename, ext = os.path.splitext(news_file)
|
2016-01-22 00:51:21 +01:00
|
|
|
if ext == '.md':
|
|
|
|
item = {}
|
|
|
|
|
|
|
|
full_path = os.path.join(item_directory, news_file)
|
|
|
|
|
2016-11-14 23:39:58 +01:00
|
|
|
item = self.read_content_file(full_path)
|
2016-01-22 00:51:21 +01:00
|
|
|
|
2016-01-22 01:17:28 +01:00
|
|
|
item['content'] = markdown_converter.convert(item['content'])
|
2016-11-15 12:06:47 +01:00
|
|
|
item['anchor'] = filename
|
|
|
|
item['url'] = "%s#%s" % (self.url, filename)
|
2016-01-22 00:51:21 +01:00
|
|
|
|
2016-01-23 02:45:22 +01:00
|
|
|
rendered_items += [item]
|
2016-01-22 00:51:21 +01:00
|
|
|
|
|
|
|
rendered_items = sorted(rendered_items, key=lambda item: item['creation_time'], reverse=True)
|
|
|
|
context['items'] = rendered_items
|
|
|
|
|
|
|
|
return context
|
|
|
|
|
|
|
|
|
|
|
|
def render_files(self, context, output_directory, jinja_env):
|
|
|
|
self.render_to_file(self.feed_template, self.feed_url, context, output_directory, jinja_env)
|
|
|
|
super(NewsFeed, self).render_files(context, output_directory, jinja_env)
|