First working version of the NewsFeed module
This commit is contained in:
parent
d233b7ae5a
commit
87c00ae761
|
@ -0,0 +1,3 @@
|
||||||
|
First test
|
||||||
|
==========
|
||||||
|
This is a first test newsitem
|
|
@ -0,0 +1,3 @@
|
||||||
|
Second test
|
||||||
|
==========
|
||||||
|
This is an other test newsitem
|
|
@ -5,9 +5,11 @@
|
||||||
<body>
|
<body>
|
||||||
{{menu}}
|
{{menu}}
|
||||||
<br/>
|
<br/>
|
||||||
{{content}}
|
{% block content %}
|
||||||
<br/>
|
{{content}}
|
||||||
Created: {{content_creation_time.strftime('%d.%m.%Y %H:%M:%S')}}</br>
|
<br/>
|
||||||
Edit: {{content_edit_time.strftime('%d.%m.%Y %H:%M:%S')}}</br>
|
Created: {{content_creation_time.strftime('%d.%m.%Y %H:%M:%S')}}</br>
|
||||||
|
Edit: {{content_edit_time.strftime('%d.%m.%Y %H:%M:%S')}}</br>
|
||||||
|
{% endblock %}
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
{% extends "base.html" %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
|
||||||
|
{{items | pprint}}
|
||||||
|
|
||||||
|
|
||||||
|
{% endblock %}
|
|
@ -0,0 +1 @@
|
||||||
|
{{items | pprint}}
|
|
@ -6,13 +6,13 @@ sys.path.append('../')
|
||||||
from verdandi.verdandi import Verdandi
|
from verdandi.verdandi import Verdandi
|
||||||
from verdandi.modules.page import Page
|
from verdandi.modules.page import Page
|
||||||
from verdandi.modules.commonassets import CommonAssets
|
from verdandi.modules.commonassets import CommonAssets
|
||||||
|
from verdandi.modules.newsfeed import NewsFeed
|
||||||
|
|
||||||
class TestPage1(Page):
|
class TestPage1(Page):
|
||||||
title = "A cool new Page"
|
title = "A cool new Page"
|
||||||
menu_title = "New Page"
|
menu_title = "New Page"
|
||||||
menu_label = "new_cool_page"
|
menu_label = "new_cool_page"
|
||||||
|
|
||||||
|
|
||||||
class TestPage2(Page):
|
class TestPage2(Page):
|
||||||
title = "An other cool Page"
|
title = "An other cool Page"
|
||||||
assets = [('img/foo.png', 'img/'),
|
assets = [('img/foo.png', 'img/'),
|
||||||
|
@ -34,11 +34,20 @@ class Assets(CommonAssets):
|
||||||
assets = [('img', 'img/dir'),
|
assets = [('img', 'img/dir'),
|
||||||
('img/', 'img/files')]
|
('img/', 'img/files')]
|
||||||
|
|
||||||
|
|
||||||
|
class News(NewsFeed):
|
||||||
|
title = "New News"
|
||||||
|
url = "news.html"
|
||||||
|
menu_title = "News"
|
||||||
|
menu_label = "news"
|
||||||
|
|
||||||
|
|
||||||
class TestBlog(Verdandi):
|
class TestBlog(Verdandi):
|
||||||
modules = [TestPage1(),
|
modules = [TestPage1(),
|
||||||
TestPage2(),
|
TestPage2(),
|
||||||
TestPage3(),
|
TestPage3(),
|
||||||
Assets()]
|
Assets(),
|
||||||
|
News()]
|
||||||
|
|
||||||
|
|
||||||
testblog = TestBlog()
|
testblog = TestBlog()
|
||||||
|
|
|
@ -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)
|
Loading…
Reference in New Issue