diff --git a/docs/changelog.rst b/docs/changelog.rst index aa594a2c..7ed84eba 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -5,6 +5,7 @@ Next release ============ * New signal: ``feed_generated`` +* Make the HTML reader parse multiple occurences of metadata tags as list 3.7.1 (2017-01-10) ================== diff --git a/pelican/readers.py b/pelican/readers.py index 61126c9c..e24354e3 100644 --- a/pelican/readers.py +++ b/pelican/readers.py @@ -440,7 +440,17 @@ class HTMLReader(BaseReader): if name == 'keywords': name = 'tags' - self.metadata[name] = contents + + if name in self.metadata: + # if this metadata already exists (i.e. a previous tag with the + # same name has already been specified then either convert to + # list or append to list + if isinstance(self.metadata[name], list): + self.metadata[name].append(contents) + else: + self.metadata[name] = [self.metadata[name], contents] + else: + self.metadata[name] = contents @classmethod def _attr_value(cls, attrs, name, default=None): diff --git a/pelican/tests/content/article_with_multiple_metadata_tags.html b/pelican/tests/content/article_with_multiple_metadata_tags.html new file mode 100644 index 00000000..f03c0b46 --- /dev/null +++ b/pelican/tests/content/article_with_multiple_metadata_tags.html @@ -0,0 +1,11 @@ + + + Metadata tags as list! + + + + + When custom metadata tags are specified more than once + they are collected into a list! + + diff --git a/pelican/tests/test_generators.py b/pelican/tests/test_generators.py index 732dd60a..0326cb5e 100644 --- a/pelican/tests/test_generators.py +++ b/pelican/tests/test_generators.py @@ -173,6 +173,7 @@ class TestArticlesGenerator(unittest.TestCase): ['Article with markdown containing footnotes', 'published', 'Default', 'article'], ['Article with template', 'published', 'Default', 'custom'], + ['Metadata tags as list!', 'published', 'Default', 'article'], ['Rst with filename metadata', 'published', 'yeah', 'article'], ['Test Markdown extensions', 'published', 'Default', 'article'], ['Test markdown File', 'published', 'test', 'article'], @@ -452,6 +453,7 @@ class TestArticlesGenerator(unittest.TestCase): 'Article with markdown and summary metadata single', 'Article with markdown containing footnotes', 'Article with template', + 'Metadata tags as list!', 'Rst with filename metadata', 'Test Markdown extensions', 'Test markdown File', diff --git a/pelican/tests/test_readers.py b/pelican/tests/test_readers.py index 4db4938e..d21fcbfb 100644 --- a/pelican/tests/test_readers.py +++ b/pelican/tests/test_readers.py @@ -657,6 +657,14 @@ class HTMLReaderTest(ReaderTest): self.assertDictHasSubset(page.metadata, expected) + def test_article_with_multiple_similar_metadata_tags(self): + page = self.read_file(path='article_with_multiple_metadata_tags.html') + expected = { + 'custom_field': ['http://notmyidea.org', 'http://mrsenko.com'], + } + + self.assertDictHasSubset(page.metadata, expected) + def test_article_with_multiple_authors(self): page = self.read_file(path='article_with_multiple_authors.html') expected = {