From 3aa8ecaf16e316bb06863b9b1e1e87afc59bdaf9 Mon Sep 17 00:00:00 2001 From: LongHairedHacker Date: Tue, 25 Apr 2017 21:33:46 +0200 Subject: [PATCH] Added support adding generic metadata to contexts Primitive open graph protocol support --- mixins/metadatamixin.py | 20 ++++++++++++++++++++ modules/gallery.py | 25 ++++++++++++++++++++++++- modules/newsfeed.py | 21 +++++++++++++++++++-- modules/page.py | 22 +++++++++++++++++++++- 4 files changed, 84 insertions(+), 4 deletions(-) create mode 100644 mixins/metadatamixin.py diff --git a/mixins/metadatamixin.py b/mixins/metadatamixin.py new file mode 100644 index 0000000..0bed80c --- /dev/null +++ b/mixins/metadatamixin.py @@ -0,0 +1,20 @@ +#!/usr/bin/env python2 +import copy + +from verdandi.mixins.templatemixin import TemplateMixin + +class MetadataMixin(TemplateMixin): + + metadata = {} + + def get_metadata(self): + return copy.copy(self.metadata) + + def get_context(self): + context = super(MetadataMixin, self).get_context() + metadata = self.get_metadata() + + for key, value in metadata.items(): + context['meta_%s' % key] = value + + return context diff --git a/modules/gallery.py b/modules/gallery.py index 2490027..e7af99e 100644 --- a/modules/gallery.py +++ b/modules/gallery.py @@ -9,9 +9,10 @@ from verdandi.mixins.templatemixin import TemplateMixin from verdandi.mixins.menuitemmixin import MenuItemMixin from verdandi.mixins.fileassetsmixin import FileAssetsMixin from verdandi.mixins.newsitemmixin import NewsItemMixin +from verdandi.mixins.metadatamixin import MetadataMixin from verdandi.constants import CONTENT_DIRECTORY, MARKDOWN_EXTENSIONS -class Gallery(MenuItemMixin, NewsItemMixin, TemplateMixin, FileAssetsMixin): +class Gallery(MenuItemMixin, NewsItemMixin, MetadataMixin, TemplateMixin, FileAssetsMixin): gallery_description_file = 'description.md' gallery_directory = 'gallery' gallery_images_url = 'img/gallery' @@ -26,6 +27,8 @@ class Gallery(MenuItemMixin, NewsItemMixin, TemplateMixin, FileAssetsMixin): template = "gallery.html" + metadata_description_len = 10 + content_directory = CONTENT_DIRECTORY markdown_extensions = MARKDOWN_EXTENSIONS @@ -70,6 +73,26 @@ class Gallery(MenuItemMixin, NewsItemMixin, TemplateMixin, FileAssetsMixin): return item + def get_metadata(self): + markdown_converter = markdown.Markdown(extensions = self.markdown_extensions) + + metadata = super(Gallery, self).get_metadata() + lines = self.description['content'].split('\n') + elipsized_description = '\n'.join(lines[0:self.news_item_len]) + elipsized_description = markdown_converter.convert(elipsized_description) + + + meta = { + 'url': "/%s" % self.url, + 'title': self.description['title'], + 'description' : elipsized_description + } + + if 'image' in metadata: + meta['image'] = "/%s" % metadata['image'] + + return meta + def get_context(self): context = super(Gallery,self).get_context() diff --git a/modules/newsfeed.py b/modules/newsfeed.py index ddcc078..f5ab63e 100644 --- a/modules/newsfeed.py +++ b/modules/newsfeed.py @@ -8,10 +8,11 @@ from dateutil import parser from verdandi.mixins.templatemixin import TemplateMixin from verdandi.mixins.menuitemmixin import MenuItemMixin from verdandi.mixins.fileassetsmixin import FileAssetsMixin +from verdandi.mixins.metadatamixin import MetadataMixin from verdandi.constants import CONTENT_DIRECTORY, MARKDOWN_EXTENSIONS -class NewsFeed(MenuItemMixin, TemplateMixin, FileAssetsMixin): +class NewsFeed(MenuItemMixin, MetadataMixin, TemplateMixin, FileAssetsMixin): title = "News feed title" template = "newsfeed.html" @@ -25,7 +26,6 @@ class NewsFeed(MenuItemMixin, TemplateMixin, FileAssetsMixin): items = [] - def process_message(self, message): other_messages = super(NewsFeed, self).process_message(message) @@ -38,6 +38,23 @@ class NewsFeed(MenuItemMixin, TemplateMixin, FileAssetsMixin): return other_messages + def get_metadata(self): + metadata = super(NewsFeed, self).get_metadata() + + meta = { + 'url': "/%s" % self.url, + 'title': self.title + } + + if 'description' in metadata: + meta['description'] = metadata['description'] + + if 'image' in metadata: + meta['image'] = "/%s" % metadata['image'] + + return meta + + def get_context(self): context = super(NewsFeed,self).get_context() context['title'] = self.title diff --git a/modules/page.py b/modules/page.py index 3342079..6501227 100644 --- a/modules/page.py +++ b/modules/page.py @@ -8,9 +8,10 @@ from verdandi.mixins.templatemixin import TemplateMixin from verdandi.mixins.menuitemmixin import MenuItemMixin from verdandi.mixins.fileassetsmixin import FileAssetsMixin from verdandi.mixins.newsitemmixin import NewsItemMixin +from verdandi.mixins.metadatamixin import MetadataMixin from verdandi.constants import CONTENT_DIRECTORY, MARKDOWN_EXTENSIONS -class Page(MenuItemMixin, NewsItemMixin, TemplateMixin, FileAssetsMixin): +class Page(MenuItemMixin, NewsItemMixin, MetadataMixin, TemplateMixin, FileAssetsMixin): content_file = "content.md" content_is_markdown = True @@ -19,6 +20,7 @@ class Page(MenuItemMixin, NewsItemMixin, TemplateMixin, FileAssetsMixin): markdown_extensions = MARKDOWN_EXTENSIONS news_item_len = 10 + metadata_description_len = 10 def process_message(self, message): @@ -45,6 +47,24 @@ class Page(MenuItemMixin, NewsItemMixin, TemplateMixin, FileAssetsMixin): return item + def get_metadata(self): + markdown_converter = markdown.Markdown(extensions = self.markdown_extensions) + + metadata = super(Page, self).get_metadata() + lines = self.content['content'].split('\n') + elipsized_content = '\n'.join(lines[0:self.news_item_len]) + elipsized_content = markdown_converter.convert(elipsized_content) + + meta = { + 'url': "/%s" % self.url, + 'title': self.content['title'], + 'description' : elipsized_content + } + + if 'image' in metadata: + meta['image'] = "/%s" % metadata['image'] + + return meta def get_context(self): context = super(Page,self).get_context()