Added NewsItemMixin

Added news support to Page
This commit is contained in:
Sebastian 2016-01-23 02:45:22 +01:00
parent 843463b548
commit 1a760e43a9
6 changed files with 108 additions and 19 deletions

View File

@ -2,5 +2,6 @@
22.1.2016 17:00 22.1.2016 17:00
First test First test
==========
This is a first test newsitem This is a first test newsitem

View File

@ -2,5 +2,6 @@
22.1.2016 17:00 22.1.2016 17:00
Second test Second test
==========
This is an other test newsitem This is an other test newsitem

View File

@ -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

View File

@ -47,4 +47,6 @@ class TemplateMixin(object):
result['creation_time'] = parser.parse(first_line) result['creation_time'] = parser.parse(first_line)
result['edit_time'] = parser.parse(second_line) result['edit_time'] = parser.parse(second_line)
content_file.close()
return result return result

View File

@ -3,7 +3,7 @@
import os import os
import markdown import markdown
from datetime import datetime from dateutil import parser
from verdandi.mixins.templatemixin import TemplateMixin from verdandi.mixins.templatemixin import TemplateMixin
from verdandi.mixins.menuitemmixin import MenuItemMixin from verdandi.mixins.menuitemmixin import MenuItemMixin
@ -29,8 +29,9 @@ class NewsFeed(MenuItemMixin, TemplateMixin, AssetsMixin):
def process_message(self, message): def process_message(self, message):
other_messages = super(NewsFeed, self).process_message(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: if message != None and message['type'] == 'news_feed_item':
self.items += message['item'] if message['feed_id'] == self.news_feed_id:
self.items += [message['item']]
return other_messages return other_messages
@ -45,7 +46,8 @@ class NewsFeed(MenuItemMixin, TemplateMixin, AssetsMixin):
rendered_items = [] rendered_items = []
for item in self.items: for item in self.items:
item['content'] = markdown_converter.convert(item['content']) 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) item_directory = os.path.join(self.content_directory, self.news_item_directory)
for news_file in os.listdir(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) 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']) item['content'] = markdown_converter.convert(item['content'])
print item rendered_items += [item]
rendered_items.append(item)
print rendered_items
rendered_items = sorted(rendered_items, key=lambda item: item['creation_time'], reverse=True) rendered_items = sorted(rendered_items, key=lambda item: item['creation_time'], reverse=True)
context['items'] = rendered_items context['items'] = rendered_items
print rendered_items
return context 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): def render_files(self, context, output_directory, jinja_env):
self.render_to_file(self.feed_template, self.feed_url, 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) super(NewsFeed, self).render_files(context, output_directory, jinja_env)

View File

@ -7,9 +7,10 @@ import markdown
from verdandi.mixins.templatemixin import TemplateMixin from verdandi.mixins.templatemixin import TemplateMixin
from verdandi.mixins.menuitemmixin import MenuItemMixin from verdandi.mixins.menuitemmixin import MenuItemMixin
from verdandi.mixins.assetsmixin import AssetsMixin from verdandi.mixins.assetsmixin import AssetsMixin
from verdandi.mixins.newsitemmixin import NewsItemMixin
from verdandi.constants import CONTENT_DIRECTORY, MARKDOWN_EXTENSIONS from verdandi.constants import CONTENT_DIRECTORY, MARKDOWN_EXTENSIONS
class Page(MenuItemMixin, TemplateMixin, AssetsMixin): class Page(MenuItemMixin, NewsItemMixin, TemplateMixin, AssetsMixin):
title = "Page Title" title = "Page Title"
content_file = "content.md" content_file = "content.md"
@ -17,20 +18,44 @@ class Page(MenuItemMixin, TemplateMixin, AssetsMixin):
markdown_extensions = MARKDOWN_EXTENSIONS 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): def get_context(self):
context = super(Page,self).get_context() context = super(Page,self).get_context()
context['page_title'] = self.title context['page_title'] = self.title
full_path = os.path.join(self.content_directory, self.content_file)
markdown_converter = markdown.Markdown(extensions = self.markdown_extensions) 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'] markdown_source = self.content['content']
context['content_edit_time'] = content['edit_time']
markdown_source = content['content']
context['content'] = markdown_converter.convert(markdown_source) context['content'] = markdown_converter.convert(markdown_source)
return context return context