From d44d27f0932c47f17bfcd181389a83a50997aec0 Mon Sep 17 00:00:00 2001 From: Holden Nelson Date: Thu, 29 Oct 2020 12:21:47 -0600 Subject: [PATCH] Support compound file extensions. Fix #2780 Before this commit, the file extension matcher could not match compound file extensions; e.g., '.md.html' would match `.html` --- RELEASE.md | 3 +++ pelican/generators.py | 3 ++- pelican/tests/test_generators.py | 11 +++++++++++ 3 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 RELEASE.md diff --git a/RELEASE.md b/RELEASE.md new file mode 100644 index 00000000..a9b88cca --- /dev/null +++ b/RELEASE.md @@ -0,0 +1,3 @@ +Release type: minor + +Support matching compound file extensions for custom readers; e.g., `.md.html` diff --git a/pelican/generators.py b/pelican/generators.py index 63e20a0a..2f63dc1d 100644 --- a/pelican/generators.py +++ b/pelican/generators.py @@ -7,6 +7,7 @@ from collections import defaultdict from functools import partial from itertools import chain, groupby from operator import attrgetter +from pathlib import Path from jinja2 import (BaseLoader, ChoiceLoader, Environment, FileSystemLoader, PrefixLoader, TemplateNotFound) @@ -123,7 +124,7 @@ class Generator: if any(fnmatch.fnmatch(basename, ignore) for ignore in ignores): return False - ext = os.path.splitext(basename)[1][1:] + ext = ''.join(Path(basename).suffixes)[1:] if extensions is False or ext in extensions: return True diff --git a/pelican/tests/test_generators.py b/pelican/tests/test_generators.py index 169765ac..db2bf40f 100644 --- a/pelican/tests/test_generators.py +++ b/pelican/tests/test_generators.py @@ -41,6 +41,17 @@ class TestGenerator(unittest.TestCase): ignored_file = os.path.join(CUR_DIR, 'content', 'ignored1.rst') self.assertFalse(include_path(ignored_file)) + def test_include_path_handles_compound_extensions(self): + """ + Test that Generator._include_path properly handles + compound extensions such as .md.html + """ + filename = os.path.join(CUR_DIR, 'content', 'article.md.html') + include_path = self.generator._include_path + self.assertTrue(include_path(filename, extensions=('md.html',))) + self.assertFalse(include_path(filename, extensions=('md',))) + self.assertFalse(include_path(filename, extensions=('html',))) + def test_get_files_exclude(self): """Test that Generator.get_files() properly excludes directories. """