From 1a760e43a9060ee8ddc8de8ff82b32cff2691aed Mon Sep 17 00:00:00 2001 From: LongHairedHacker Date: Sat, 23 Jan 2016 02:45:22 +0100 Subject: [PATCH] Added NewsItemMixin Added news support to Page --- test_input/content/news/test.md | 3 ++- test_input/content/news/test1.md | 3 ++- verdandi/mixins/newsitemmixin.py | 36 ++++++++++++++++++++++++++ verdandi/mixins/templatemixin.py | 2 ++ verdandi/modules/newsfeed.py | 44 ++++++++++++++++++++++++-------- verdandi/modules/page.py | 39 +++++++++++++++++++++++----- 6 files changed, 108 insertions(+), 19 deletions(-) create mode 100644 verdandi/mixins/newsitemmixin.py diff --git a/test_input/content/news/test.md b/test_input/content/news/test.md index 9b39eb1..59af990 100644 --- a/test_input/content/news/test.md +++ b/test_input/content/news/test.md @@ -2,5 +2,6 @@ 22.1.2016 17:00 First test -========== + + This is a first test newsitem diff --git a/test_input/content/news/test1.md b/test_input/content/news/test1.md index 9355611..e670ebb 100644 --- a/test_input/content/news/test1.md +++ b/test_input/content/news/test1.md @@ -2,5 +2,6 @@ 22.1.2016 17:00 Second test -========== + + This is an other test newsitem diff --git a/verdandi/mixins/newsitemmixin.py b/verdandi/mixins/newsitemmixin.py new file mode 100644 index 0000000..2adf6ad --- /dev/null +++ b/verdandi/mixins/newsitemmixin.py @@ -0,0 +1,36 @@ +#!/usr/bin/env python2 +from verdandi.mixins.messagemixin import MessageMixin + +class NewsItemMixin(MessageMixin): + news_item_title = "Not the news item you need ..." + news_item_content = "... but the news item you deserve." + news_item_creation_time = None + news_item_edit_time = None + news_item_url = '/index.html' + + news_feed_id = 'news' + + + def get_news_item(self): + item = { + 'title': self.news_item_titlenews_item_title, + 'content': self.news_item_content, + 'url' : self.news_item_url, + 'creation_time': self.news_item_creation_time, + 'edit_time': self.news_item_edit_time + } + + return item + + + def process_message(self, message): + other_messages = super(NewsItemMixin, self).process_message(message) + + if message == None: + other_messages += [{ + 'type' : 'news_feed_item', + 'feed_id' : self.news_feed_id, + 'item' : self.get_news_item() + }] + + return other_messages diff --git a/verdandi/mixins/templatemixin.py b/verdandi/mixins/templatemixin.py index 82ca72f..f3b505c 100644 --- a/verdandi/mixins/templatemixin.py +++ b/verdandi/mixins/templatemixin.py @@ -47,4 +47,6 @@ class TemplateMixin(object): result['creation_time'] = parser.parse(first_line) result['edit_time'] = parser.parse(second_line) + content_file.close() + return result diff --git a/verdandi/modules/newsfeed.py b/verdandi/modules/newsfeed.py index 4832940..c0418be 100644 --- a/verdandi/modules/newsfeed.py +++ b/verdandi/modules/newsfeed.py @@ -3,7 +3,7 @@ import os import markdown -from datetime import datetime +from dateutil import parser from verdandi.mixins.templatemixin import TemplateMixin from verdandi.mixins.menuitemmixin import MenuItemMixin @@ -29,8 +29,9 @@ class NewsFeed(MenuItemMixin, TemplateMixin, AssetsMixin): def process_message(self, message): other_messages = super(NewsFeed, self).process_message(message) - if message != None and message['type'] == 'news_feed_item' and message['feed_id'] == news_feed_id: - self.items += message['item'] + if message != None and message['type'] == 'news_feed_item': + if message['feed_id'] == self.news_feed_id: + self.items += [message['item']] return other_messages @@ -45,7 +46,8 @@ class NewsFeed(MenuItemMixin, TemplateMixin, AssetsMixin): rendered_items = [] for item in self.items: item['content'] = markdown_converter.convert(item['content']) - rendered_items.append(item) + item['url'] = self.url + rendered_items += [item] item_directory = os.path.join(self.content_directory, self.news_item_directory) for news_file in os.listdir(item_directory): @@ -55,22 +57,44 @@ class NewsFeed(MenuItemMixin, TemplateMixin, AssetsMixin): full_path = os.path.join(item_directory, news_file) - item = self.read_content_file(full_path) + item = self.read_news_item_file(full_path) item['content'] = markdown_converter.convert(item['content']) - print item - - rendered_items.append(item) - - print rendered_items + rendered_items += [item] rendered_items = sorted(rendered_items, key=lambda item: item['creation_time'], reverse=True) context['items'] = rendered_items + print rendered_items + return context + def read_news_item_file(self, path): + item_file = open(path, 'r') + + result = {} + + first_line = item_file.readline() + second_line = item_file.readline() + + third_line = item_file.readline().strip() + while third_line == '': + third_line = item_file.readline().strip() + + result['title'] = third_line + + result['content'] = item_file.read() + + result['creation_time'] = parser.parse(first_line) + result['edit_time'] = parser.parse(second_line) + + item_file.close() + + return result + + 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) diff --git a/verdandi/modules/page.py b/verdandi/modules/page.py index 57c2038..c7c55cd 100644 --- a/verdandi/modules/page.py +++ b/verdandi/modules/page.py @@ -7,9 +7,10 @@ import markdown from verdandi.mixins.templatemixin import TemplateMixin from verdandi.mixins.menuitemmixin import MenuItemMixin from verdandi.mixins.assetsmixin import AssetsMixin +from verdandi.mixins.newsitemmixin import NewsItemMixin from verdandi.constants import CONTENT_DIRECTORY, MARKDOWN_EXTENSIONS -class Page(MenuItemMixin, TemplateMixin, AssetsMixin): +class Page(MenuItemMixin, NewsItemMixin, TemplateMixin, AssetsMixin): title = "Page Title" content_file = "content.md" @@ -17,20 +18,44 @@ class Page(MenuItemMixin, TemplateMixin, AssetsMixin): markdown_extensions = MARKDOWN_EXTENSIONS + news_item_len = 10 + + + def process_message(self, message): + if message == None: + full_path = os.path.join(self.content_directory, self.content_file) + self.content = self.read_content_file(full_path) + + other_messages = super(Page, self).process_message(message) + + return other_messages + + + def get_news_item(self): + lines = self.content['content'].split('\n') + elipsized_content = '\n'.join(lines[0:self.news_item_len]) + + item = { + 'title': self.title, + 'content': elipsized_content, + 'creation_time': self.content['creation_time'], + 'edit_time': self.content['edit_time'], + 'url' : self.url + } + + return item + def get_context(self): context = super(Page,self).get_context() context['page_title'] = self.title - full_path = os.path.join(self.content_directory, self.content_file) markdown_converter = markdown.Markdown(extensions = self.markdown_extensions) - content = self.read_content_file(full_path) + context['content_creation_time'] = self.content['creation_time'] + context['content_edit_time'] = self.content['edit_time'] - context['content_creation_time'] = content['creation_time'] - context['content_edit_time'] = content['edit_time'] - - markdown_source = content['content'] + markdown_source = self.content['content'] context['content'] = markdown_converter.convert(markdown_source) return context