From 65daa9e537052342ef44d75c3fda65ec637a0554 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Charles=20Fl=C3=A8che?= Date: Fri, 9 Feb 2018 10:39:11 +0100 Subject: [PATCH 1/4] Extract refresh_metadata_intersite_links methods --- pelican/contents.py | 10 ++++++++++ pelican/generators.py | 15 +++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/pelican/contents.py b/pelican/contents.py index 15770fc87..852bb49d5 100644 --- a/pelican/contents.py +++ b/pelican/contents.py @@ -413,6 +413,16 @@ def relative_dir(self): os.path.abspath(self.source_path), os.path.abspath(self.settings['PATH'])))) + def refresh_metadata_intersite_links(self): + for key in self.settings['FORMATTED_FIELDS']: + if key in self.metadata: + value = self._update_content( + self.metadata[key], + self.get_siteurl() + ) + self.metadata[key] = value + setattr(self, key.lower(), value) + class Page(Content): mandatory_properties = ('title',) diff --git a/pelican/generators.py b/pelican/generators.py index eb97c1150..8a0180f78 100644 --- a/pelican/generators.py +++ b/pelican/generators.py @@ -581,6 +581,14 @@ def generate_output(self, writer): self.generate_pages(writer) signals.article_writer_finalized.send(self, writer=writer) + def refresh_metadata_intersite_links(self): + for e in chain(self.articles, + self.translations, + self.drafts, + self.drafts_translations): + if hasattr(e, 'refresh_metadata_intersite_links'): + e.refresh_metadata_intersite_links() + class PagesGenerator(CachingGenerator): """Generate pages""" @@ -649,6 +657,13 @@ def generate_output(self, writer): override_output=hasattr(page, 'override_save_as')) signals.page_writer_finalized.send(self, writer=writer) + def refresh_metadata_intersite_links(self): + for e in chain(self.pages, + self.hidden_pages, + self.hidden_translations): + if hasattr(e, 'refresh_metadata_intersite_links'): + e.refresh_metadata_intersite_links() + class StaticGenerator(Generator): """copy static paths (what you want to copy, like images, medias etc. From 06fd9be1c22f3b5f70568389c206afdb9ad1f348 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Charles=20Fl=C3=A8che?= Date: Fri, 9 Feb 2018 10:40:47 +0100 Subject: [PATCH 2/4] Get Content._summary from metadata --- pelican/contents.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pelican/contents.py b/pelican/contents.py index 852bb49d5..d8881fe93 100644 --- a/pelican/contents.py +++ b/pelican/contents.py @@ -337,8 +337,8 @@ def get_summary(self, siteurl): This is based on the summary metadata if set, otherwise truncate the content. """ - if hasattr(self, '_summary'): - return self._update_content(self._summary, siteurl) + if 'summary' in self.metadata: + return self.metadata['summary'] if self.settings['SUMMARY_MAX_LENGTH'] is None: return self.content From 31dc9366f0219c1a273fb8e844e1ccd35e38ba03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Charles=20Fl=C3=A8che?= Date: Fri, 9 Feb 2018 10:41:32 +0100 Subject: [PATCH 3/4] Initialize metadata with refresh_metadata_intersite_links --- pelican/__init__.py | 4 ++++ pelican/contents.py | 5 ++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/pelican/__init__.py b/pelican/__init__.py index 70013804b..89eefdd31 100644 --- a/pelican/__init__.py +++ b/pelican/__init__.py @@ -170,6 +170,10 @@ def run(self): if hasattr(p, 'generate_context'): p.generate_context() + for p in generators: + if hasattr(p, 'refresh_metadata_intersite_links'): + p.refresh_metadata_intersite_links() + signals.all_generators_finalized.send(generators) writer = self.get_writer() diff --git a/pelican/contents.py b/pelican/contents.py index d8881fe93..310690ba3 100644 --- a/pelican/contents.py +++ b/pelican/contents.py @@ -140,9 +140,8 @@ def __init__(self, content, metadata=None, settings=None, if not hasattr(self, 'status'): self.status = getattr(self, 'default_status', None) - # store the summary metadata if it is set - if 'summary' in metadata: - self._summary = metadata['summary'] + if len(self._context.get('filenames', [])) > 0: + self.refresh_metadata_intersite_links() signals.content_object_init.send(self) From 3de422b1ab15cccce8e3b17e50bb31c137e9101c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Charles=20Fl=C3=A8che?= Date: Fri, 9 Feb 2018 10:43:23 +0100 Subject: [PATCH 4/4] Add test for parsed metadata --- pelican/tests/test_contents.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/pelican/tests/test_contents.py b/pelican/tests/test_contents.py index d028c7a1a..edd91fb67 100644 --- a/pelican/tests/test_contents.py +++ b/pelican/tests/test_contents.py @@ -319,17 +319,21 @@ def test_intrasite_link(self): ) # also test for summary in metadata - args['metadata']['summary'] = ( + parsed = ( 'A simple summary test, with a ' 'link' ) - args['context']['localsiteurl'] = 'http://notmyidea.org' - p = Page(**args) - self.assertEqual( - p.summary, + linked = ( 'A simple summary test, with a ' 'link' ) + args['settings']['FORMATTED_FIELDS'] = ['summary', 'custom'] + args['metadata']['summary'] = parsed + args['metadata']['custom'] = parsed + args['context']['localsiteurl'] = 'http://notmyidea.org' + p = Page(**args) + self.assertEqual(p.summary, linked) + self.assertEqual(p.custom, linked) def test_intrasite_link_more(self): # type does not take unicode in PY2 and bytes in PY3, which in