diff --git a/pelican/readers.py b/pelican/readers.py index a3e89af8..48985ed6 100644 --- a/pelican/readers.py +++ b/pelican/readers.py @@ -288,7 +288,10 @@ class MarkdownReader(BaseReader): with pelican_open(source_path) as text: content = self._md.convert(text) - metadata = self._parse_metadata(self._md.Meta) + if hasattr(self._md, 'Meta'): + metadata = self._parse_metadata(self._md.Meta) + else: + metadata = {} return content, metadata diff --git a/pelican/tests/content/empty.md b/pelican/tests/content/empty.md new file mode 100644 index 00000000..e69de29b diff --git a/pelican/tests/content/empty_with_bom.md b/pelican/tests/content/empty_with_bom.md new file mode 100644 index 00000000..5f282702 --- /dev/null +++ b/pelican/tests/content/empty_with_bom.md @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/pelican/tests/test_cache.py b/pelican/tests/test_cache.py index 3da3f789..e8ea4967 100644 --- a/pelican/tests/test_cache.py +++ b/pelican/tests/test_cache.py @@ -56,12 +56,15 @@ class TestCache(unittest.TestCase): generator.readers.read_file = MagicMock() generator.generate_context() """ - 3 Files don't get cached because they were not valid + 6 files don't get cached because they were not valid + - article_with_attributes_containing_double_quotes.html - article_with_comments.html - article_with_null_attributes.html - 2012-11-30_md_w_filename_meta#foo-bar.md + - empty.md + - empty_with_bom.md """ - self.assertEqual(generator.readers.read_file.call_count, 4) + self.assertEqual(generator.readers.read_file.call_count, 6) @unittest.skipUnless(MagicMock, 'Needs Mock module') def test_article_reader_content_caching(self): diff --git a/pelican/tests/test_readers.py b/pelican/tests/test_readers.py index e9100241..43279179 100644 --- a/pelican/tests/test_readers.py +++ b/pelican/tests/test_readers.py @@ -546,6 +546,22 @@ class MdReaderTest(ReaderTest): } self.assertDictHasSubset(metadata, expected) + def test_empty_file(self): + reader = readers.MarkdownReader(settings=get_settings()) + content, metadata = reader.read( + _path('empty.md')) + + self.assertEqual(metadata, {}) + self.assertEqual(content, '') + + def test_empty_file_with_bom(self): + reader = readers.MarkdownReader(settings=get_settings()) + content, metadata = reader.read( + _path('empty_with_bom.md')) + + self.assertEqual(metadata, {}) + self.assertEqual(content, '') + class HTMLReaderTest(ReaderTest): def test_article_with_comments(self): diff --git a/pelican/utils.py b/pelican/utils.py index 4e729361..06290d16 100644 --- a/pelican/utils.py +++ b/pelican/utils.py @@ -244,7 +244,7 @@ def pelican_open(filename, mode='rb', strip_crs=(sys.platform == 'win32')): with codecs.open(filename, mode, encoding='utf-8') as infile: content = infile.read() - if content[0] == codecs.BOM_UTF8.decode('utf8'): + if content[:1] == codecs.BOM_UTF8.decode('utf8'): content = content[1:] if strip_crs: content = content.replace('\r\n', '\n')