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