diff --git a/pelican/__init__.py b/pelican/__init__.py index 942f07ed2..94012e702 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 e84c8296b..03ce0a431 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) @@ -356,8 +355,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 @@ -432,6 +431,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 b9e402431..65eb05193 100644 --- a/pelican/generators.py +++ b/pelican/generators.py @@ -588,6 +588,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""" @@ -656,6 +664,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. diff --git a/pelican/tests/test_contents.py b/pelican/tests/test_contents.py index 04c82f612..8ab605538 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