diff --git a/test_input/content/news/test.md b/test_input/content/news/test.md new file mode 100644 index 0000000..0255835 --- /dev/null +++ b/test_input/content/news/test.md @@ -0,0 +1,3 @@ +First test +========== +This is a first test newsitem diff --git a/test_input/content/news/test1.md b/test_input/content/news/test1.md new file mode 100644 index 0000000..0dcdf9e --- /dev/null +++ b/test_input/content/news/test1.md @@ -0,0 +1,3 @@ +Second test +========== +This is an other test newsitem diff --git a/test_input/templates/base.html b/test_input/templates/base.html index c6fde94..5a74e36 100644 --- a/test_input/templates/base.html +++ b/test_input/templates/base.html @@ -5,9 +5,11 @@ {{menu}}
- {{content}} -
- Created: {{content_creation_time.strftime('%d.%m.%Y %H:%M:%S')}}
- Edit: {{content_edit_time.strftime('%d.%m.%Y %H:%M:%S')}}
+ {% block content %} + {{content}} +
+ Created: {{content_creation_time.strftime('%d.%m.%Y %H:%M:%S')}}
+ Edit: {{content_edit_time.strftime('%d.%m.%Y %H:%M:%S')}}
+ {% endblock %} diff --git a/test_input/templates/newsfeed.html b/test_input/templates/newsfeed.html new file mode 100644 index 0000000..442bf2b --- /dev/null +++ b/test_input/templates/newsfeed.html @@ -0,0 +1,8 @@ +{% extends "base.html" %} + +{% block content %} + +{{items | pprint}} + + +{% endblock %} diff --git a/test_input/templates/newsfeed.rss b/test_input/templates/newsfeed.rss new file mode 100644 index 0000000..93e0d35 --- /dev/null +++ b/test_input/templates/newsfeed.rss @@ -0,0 +1 @@ +{{items | pprint}} diff --git a/test_input/testblog.py b/test_input/testblog.py index 524cf3c..64b3ea2 100644 --- a/test_input/testblog.py +++ b/test_input/testblog.py @@ -6,13 +6,13 @@ sys.path.append('../') from verdandi.verdandi import Verdandi from verdandi.modules.page import Page from verdandi.modules.commonassets import CommonAssets +from verdandi.modules.newsfeed import NewsFeed class TestPage1(Page): title = "A cool new Page" menu_title = "New Page" menu_label = "new_cool_page" - class TestPage2(Page): title = "An other cool Page" assets = [('img/foo.png', 'img/'), @@ -34,11 +34,20 @@ class Assets(CommonAssets): assets = [('img', 'img/dir'), ('img/', 'img/files')] + +class News(NewsFeed): + title = "New News" + url = "news.html" + menu_title = "News" + menu_label = "news" + + class TestBlog(Verdandi): modules = [TestPage1(), TestPage2(), TestPage3(), - Assets()] + Assets(), + News()] testblog = TestBlog() diff --git a/verdandi/modules/newsfeed.py b/verdandi/modules/newsfeed.py new file mode 100644 index 0000000..1269797 --- /dev/null +++ b/verdandi/modules/newsfeed.py @@ -0,0 +1,81 @@ +#!/usr/bin/env python2 + +import os +import markdown + +from datetime import datetime + +from verdandi.mixins.templatemixin import TemplateMixin +from verdandi.mixins.menuitemmixin import MenuItemMixin +from verdandi.mixins.assetsmixin import AssetsMixin +from verdandi.constants import CONTENT_DIRECTORY, MARKDOWN_EXTENSIONS + + +class NewsFeed(MenuItemMixin, TemplateMixin, AssetsMixin): + + 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) + + if message != None and message['type'] == 'news_feed_item' and message['feed_id'] == news_feed_id: + self.items += message['item'] + + return other_messages + + + def get_context(self): + context = super(NewsFeed,self).get_context() + context['page_title'] = self.title + 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']) + rendered_items.append(item) + + item_directory = os.path.join(self.content_directory, self.news_item_directory) + for news_file in os.listdir(item_directory): + _, ext = os.path.splitext(news_file) + if ext == '.md': + item = {} + + full_path = os.path.join(item_directory, news_file) + + ctime = os.path.getctime(full_path) + item['creation_time'] = datetime.fromtimestamp(ctime) + + mtime = os.path.getmtime(full_path) + item['edit_time'] = datetime.fromtimestamp(mtime) + + markdown_source = open(full_path, 'r').read() + item['content'] = markdown_converter.convert(markdown_source) + + print item + + rendered_items.append(item) + + print rendered_items + + 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)