mirror of
https://github.com/getpelican/pelican.git
synced 2025-10-15 20:28:56 +02:00
Merge pull request #2288 from charlesfleche/fix-metadata-intrasite-links-squashed
Fix intrasite links for non-'summary' metadata
Metadata like `MyArticleBanner: ` would be properly parsed (as defined in `FORMATTED_FIELDS`), but the intrasite links would not be processed.
Only the summary gets its intrasite links processed, has its value is either generated from the content (calling self._update_content at some point) or self._update_content is explicitly called if summary is passed as metadata.
This PR expands the paths as soon as possible in (`Content.__init__`) for metadata defined in `FORMATTED_FIELDS`.
This commit is contained in:
commit
2d24d6b997
4 changed files with 42 additions and 10 deletions
|
|
@ -170,6 +170,10 @@ class Pelican(object):
|
||||||
if hasattr(p, 'generate_context'):
|
if hasattr(p, 'generate_context'):
|
||||||
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)
|
signals.all_generators_finalized.send(generators)
|
||||||
|
|
||||||
writer = self.get_writer()
|
writer = self.get_writer()
|
||||||
|
|
|
||||||
|
|
@ -140,9 +140,8 @@ class Content(object):
|
||||||
if not hasattr(self, 'status'):
|
if not hasattr(self, 'status'):
|
||||||
self.status = getattr(self, 'default_status', None)
|
self.status = getattr(self, 'default_status', None)
|
||||||
|
|
||||||
# store the summary metadata if it is set
|
if len(self._context.get('filenames', [])) > 0:
|
||||||
if 'summary' in metadata:
|
self.refresh_metadata_intersite_links()
|
||||||
self._summary = metadata['summary']
|
|
||||||
|
|
||||||
signals.content_object_init.send(self)
|
signals.content_object_init.send(self)
|
||||||
|
|
||||||
|
|
@ -356,8 +355,8 @@ class Content(object):
|
||||||
This is based on the summary metadata if set, otherwise truncate the
|
This is based on the summary metadata if set, otherwise truncate the
|
||||||
content.
|
content.
|
||||||
"""
|
"""
|
||||||
if hasattr(self, '_summary'):
|
if 'summary' in self.metadata:
|
||||||
return self._update_content(self._summary, siteurl)
|
return self.metadata['summary']
|
||||||
|
|
||||||
if self.settings['SUMMARY_MAX_LENGTH'] is None:
|
if self.settings['SUMMARY_MAX_LENGTH'] is None:
|
||||||
return self.content
|
return self.content
|
||||||
|
|
@ -432,6 +431,16 @@ class Content(object):
|
||||||
os.path.abspath(self.source_path),
|
os.path.abspath(self.source_path),
|
||||||
os.path.abspath(self.settings['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):
|
class Page(Content):
|
||||||
mandatory_properties = ('title',)
|
mandatory_properties = ('title',)
|
||||||
|
|
|
||||||
|
|
@ -588,6 +588,14 @@ class ArticlesGenerator(CachingGenerator):
|
||||||
self.generate_pages(writer)
|
self.generate_pages(writer)
|
||||||
signals.article_writer_finalized.send(self, writer=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):
|
class PagesGenerator(CachingGenerator):
|
||||||
"""Generate pages"""
|
"""Generate pages"""
|
||||||
|
|
@ -656,6 +664,13 @@ class PagesGenerator(CachingGenerator):
|
||||||
override_output=hasattr(page, 'override_save_as'))
|
override_output=hasattr(page, 'override_save_as'))
|
||||||
signals.page_writer_finalized.send(self, writer=writer)
|
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):
|
class StaticGenerator(Generator):
|
||||||
"""copy static paths (what you want to copy, like images, medias etc.
|
"""copy static paths (what you want to copy, like images, medias etc.
|
||||||
|
|
|
||||||
|
|
@ -319,17 +319,21 @@ class TestPage(LoggedTestCase):
|
||||||
)
|
)
|
||||||
|
|
||||||
# also test for summary in metadata
|
# also test for summary in metadata
|
||||||
args['metadata']['summary'] = (
|
parsed = (
|
||||||
'A simple summary test, with a '
|
'A simple summary test, with a '
|
||||||
'<a href="|filename|article.rst">link</a>'
|
'<a href="|filename|article.rst">link</a>'
|
||||||
)
|
)
|
||||||
args['context']['localsiteurl'] = 'http://notmyidea.org'
|
linked = (
|
||||||
p = Page(**args)
|
|
||||||
self.assertEqual(
|
|
||||||
p.summary,
|
|
||||||
'A simple summary test, with a '
|
'A simple summary test, with a '
|
||||||
'<a href="http://notmyidea.org/article.html">link</a>'
|
'<a href="http://notmyidea.org/article.html">link</a>'
|
||||||
)
|
)
|
||||||
|
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):
|
def test_intrasite_link_more(self):
|
||||||
# type does not take unicode in PY2 and bytes in PY3, which in
|
# type does not take unicode in PY2 and bytes in PY3, which in
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue