diff --git a/pelican/readers.py b/pelican/readers.py index e899838a..a620a1e8 100644 --- a/pelican/readers.py +++ b/pelican/readers.py @@ -672,7 +672,7 @@ def parse_path_metadata(source_path, settings=None, process=None): # .items() for py3k compat. for k, v in match.groupdict().items(): k = k.lower() # metadata must be lowercase - if k not in metadata: + if v is not None and k not in metadata: if process: v = process(k, v) metadata[k] = v diff --git a/pelican/tests/test_readers.py b/pelican/tests/test_readers.py index ac0f81dc..0d22bf44 100644 --- a/pelican/tests/test_readers.py +++ b/pelican/tests/test_readers.py @@ -166,6 +166,25 @@ class RstReaderTest(ReaderTest): } self.assertDictHasSubset(page.metadata, expected) + def test_article_with_optional_filename_metadata(self): + page = self.read_file( + path='2012-11-29_rst_w_filename_meta#foo-bar.rst', + FILENAME_METADATA='(?P\d{4}-\d{2}-\d{2})?') + expected = { + 'date': SafeDatetime(2012, 11, 29), + 'reader': 'rst', + } + self.assertDictHasSubset(page.metadata, expected) + + page = self.read_file( + path='article.rst', + FILENAME_METADATA='(?P\d{4}-\d{2}-\d{2})?') + expected = { + 'reader': 'rst', + } + self.assertDictHasSubset(page.metadata, expected) + self.assertNotIn('date', page.metadata, 'Date should not be set.') + def test_article_metadata_key_lowercase(self): # Keys of metadata should be lowercase. reader = readers.RstReader(settings=get_settings()) @@ -561,6 +580,25 @@ class MdReaderTest(ReaderTest): } self.assertDictHasSubset(page.metadata, expected) + def test_article_with_optional_filename_metadata(self): + page = self.read_file( + path='2012-11-30_md_w_filename_meta#foo-bar.md', + FILENAME_METADATA='(?P\d{4}-\d{2}-\d{2})?') + expected = { + 'date': SafeDatetime(2012, 11, 30), + 'reader': 'markdown', + } + self.assertDictHasSubset(page.metadata, expected) + + page = self.read_file( + path='empty.md', + FILENAME_METADATA='(?P\d{4}-\d{2}-\d{2})?') + expected = { + 'reader': 'markdown', + } + self.assertDictHasSubset(page.metadata, expected) + self.assertNotIn('date', page.metadata, 'Date should not be set.') + def test_duplicate_tags_or_authors_are_removed(self): reader = readers.MarkdownReader(settings=get_settings()) content, metadata = reader.read(