From 76c928e93bc94780a1aae969ab53311b42542497 Mon Sep 17 00:00:00 2001 From: LongHairedHacker Date: Thu, 26 Feb 2015 23:56:19 +0100 Subject: [PATCH] Markdown content for pages works --- .gitignore | 4 ++++ test_input/content/content.md | 24 ++++++++++++++++++++++++ test_input/templates/base.html | 4 ++++ verdandi/constants.py | 5 +++++ verdandi/mixins/templatemixin.py | 2 ++ verdandi/modules/page.py | 31 +++++++++++++++++++++++++------ verdandi/verdandi.py | 19 ++++++++++--------- 7 files changed, 74 insertions(+), 15 deletions(-) create mode 100644 test_input/content/content.md create mode 100644 verdandi/constants.py diff --git a/.gitignore b/.gitignore index 8aa978b..681ba07 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,5 @@ +test_input/rendered_root virtenv + +*.pyc +*.swp diff --git a/test_input/content/content.md b/test_input/content/content.md new file mode 100644 index 0000000..062d6c1 --- /dev/null +++ b/test_input/content/content.md @@ -0,0 +1,24 @@ +Test +---- +Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. + +Foo | Rofl | Lol +----|------|----- +A | B | C +D | E | F + + +Stet clita +========== +kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus + +* est +* Lorem +* ipsum +* dolor +* *sit* +* **amet**. + +1. Lol +2. No +3. Nope diff --git a/test_input/templates/base.html b/test_input/templates/base.html index 4cde369..4c90851 100644 --- a/test_input/templates/base.html +++ b/test_input/templates/base.html @@ -3,5 +3,9 @@ {{page_title}} + {{content}} +
+ Created: {{content_creation_time.strftime('%d.%m.%Y %H:%M:%S')}}
+ Edit: {{content_edit_time.strftime('%d.%m.%Y %H:%M:%S')}}
diff --git a/verdandi/constants.py b/verdandi/constants.py new file mode 100644 index 0000000..68cc2a7 --- /dev/null +++ b/verdandi/constants.py @@ -0,0 +1,5 @@ +#!/usr/bin/env python2 + +OUTPUT_DIRECTORY = "rendered_root" +TEMPLATE_DIRECTORY = "templates" +CONTENT_DIRECTORY = "content" diff --git a/verdandi/mixins/templatemixin.py b/verdandi/mixins/templatemixin.py index ce597cd..4c99456 100644 --- a/verdandi/mixins/templatemixin.py +++ b/verdandi/mixins/templatemixin.py @@ -13,10 +13,12 @@ class TemplateMixin(object): def render(self, output_directory, jinja_env): template = jinja_env.get_template(self.template) html = template.render(self.get_context()) + out_path = os.path.join(output_directory, self.url) out_dir = os.path.dirname(out_path) if not os.path.isdir(out_dir): os.mkdir(out_dir) + out_file = open(out_path, "wb") out_file.write(html) out_file.close() diff --git a/verdandi/modules/page.py b/verdandi/modules/page.py index 41c3b8a..afd8775 100644 --- a/verdandi/modules/page.py +++ b/verdandi/modules/page.py @@ -1,17 +1,36 @@ #!/usr/bin/env python2 +import os +from datetime import datetime + +import markdown from verdandi.mixins.templatemixin import TemplateMixin from verdandi.mixins.menuitemmixin import MenuItemMixin - +from verdandi.constants import CONTENT_DIRECTORY class Page(TemplateMixin, MenuItemMixin): - title = 'Page Title' + + title = "Page Title" + content_file = "content.md" + content_directory = CONTENT_DIRECTORY + + markdown_extensions = ['markdown.extensions.sane_lists', + 'markdown.extensions.tables'] 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) + + ctime = os.path.getctime(full_path) + context['content_creation_time'] = datetime.fromtimestamp(ctime) + + mtime = os.path.getmtime(full_path) + context['content_edit_time'] = datetime.fromtimestamp(mtime) + + markdown_source = open(full_path, 'r').read() + context['content'] = markdown_converter.convert(markdown_source) + return context - - - - diff --git a/verdandi/verdandi.py b/verdandi/verdandi.py index 633a96f..f89bbf1 100644 --- a/verdandi/verdandi.py +++ b/verdandi/verdandi.py @@ -3,15 +3,17 @@ import os from jinja2 import Environment, FileSystemLoader +from constants import OUTPUT_DIRECTORY, TEMPLATE_DIRECTORY + class Verdandi(object): - template_dir = "templates" - output_directory = "rendered_root" + template_directory = TEMPLATE_DIRECTORY + output_directory = OUTPUT_DIRECTORY modules = [] def __init__(self): - self.jinja_env = Environment(loader=FileSystemLoader(self.template_dir)) + self.jinja_env = Environment(loader=FileSystemLoader(self.template_directory)) def send_message(self, message): @@ -19,22 +21,21 @@ class Verdandi(object): for module in self.modules: results += module.process_message(message) - + return results - def pass_messages(self): + def pass_messages(self): messages = self.send_message(None) while len(messages) > 0: message = messages.pop() - print message messages = messages + self.send_message(message) - - + + def render(self): if not os.path.exists(self.output_directory): - os.mkdir(self.output_directory) + os.mkdir(self.output_directory) for module in self.modules: module.render(self.output_directory, self.jinja_env)