diff options
author | David Lord <davidism@gmail.com> | 2022-03-25 15:34:33 -0700 |
---|---|---|
committer | David Lord <davidism@gmail.com> | 2022-03-25 15:34:33 -0700 |
commit | 6f79daafe868b8ef20baecdcb45d12299529ed2e (patch) | |
tree | 9ca03b95ee4f2380fb1021db522b8e868846bc99 | |
parent | e542e100027aaa131df73ad06b71ba9a4ee348c8 (diff) | |
parent | 7f66a58a967ec11b56c76d37782990d9e72353ab (diff) | |
download | jinja2-6f79daafe868b8ef20baecdcb45d12299529ed2e.tar.gz |
Merge branch '3.1.x'
-rw-r--r-- | CHANGES.rst | 9 | ||||
-rw-r--r-- | src/jinja2/loaders.py | 10 | ||||
-rw-r--r-- | tests/test_loader.py | 16 |
3 files changed, 28 insertions, 7 deletions
diff --git a/CHANGES.rst b/CHANGES.rst index cfc17e6..788809f 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -6,6 +6,15 @@ Version 3.2.0 Unreleased +Version 3.1.1 +------------- + +Released 2022-03-25 + +- The template filename on Windows uses the primary path separator. + :issue:`1637` + + Version 3.1.0 ------------- diff --git a/src/jinja2/loaders.py b/src/jinja2/loaders.py index e255cd4..d2f9809 100644 --- a/src/jinja2/loaders.py +++ b/src/jinja2/loaders.py @@ -213,7 +213,8 @@ class FileSystemLoader(BaseLoader): except OSError: return False - return contents, filename, uptodate + # Use normpath to convert Windows altsep to sep. + return contents, os.path.normpath(filename), uptodate raise TemplateNotFound(template) def list_templates(self) -> t.List[str]: @@ -330,8 +331,11 @@ class PackageLoader(BaseLoader): self, environment: "Environment", template: str ) -> t.Tuple[str, str, t.Optional[t.Callable[[], bool]]]: # Use posixpath even on Windows to avoid "drive:" or UNC - # segments breaking out of the search directory. - p = posixpath.join(self._template_root, *split_template_path(template)) + # segments breaking out of the search directory. Use normpath to + # convert Windows altsep to sep. + p = os.path.normpath( + posixpath.join(self._template_root, *split_template_path(template)) + ) up_to_date: t.Optional[t.Callable[[], bool]] if self._archive is None: diff --git a/tests/test_loader.py b/tests/test_loader.py index 8123583..04c921d 100644 --- a/tests/test_loader.py +++ b/tests/test_loader.py @@ -3,7 +3,6 @@ import importlib.machinery import importlib.util import os import platform -import posixpath import shutil import sys import tempfile @@ -172,6 +171,15 @@ class TestFileSystemLoader: t = e.get_template("mojibake.txt") assert t.render() == expect + def test_filename_normpath(self): + """Nested template names should only contain ``os.sep`` in the + loaded filename. + """ + loader = loaders.FileSystemLoader(self.searchpath) + e = Environment(loader=loader) + t = e.get_template("foo/test.html") + assert t.filename == str(self.searchpath / "foo" / "test.html") + class TestModuleLoader: archive = None @@ -304,7 +312,7 @@ def package_dir_loader(monkeypatch): def test_package_dir_source(package_dir_loader, template, expect): source, name, up_to_date = package_dir_loader.get_source(None, template) assert source.rstrip() == expect - assert name.endswith(posixpath.join(*split_template_path(template))) + assert name.endswith(os.path.join(*split_template_path(template))) assert up_to_date() @@ -326,7 +334,7 @@ def package_file_loader(monkeypatch): def test_package_file_source(package_file_loader, template, expect): source, name, up_to_date = package_file_loader.get_source(None, template) assert source.rstrip() == expect - assert name.endswith(posixpath.join(*split_template_path(template))) + assert name.endswith(os.path.join(*split_template_path(template))) assert up_to_date() @@ -349,7 +357,7 @@ def package_zip_loader(monkeypatch): def test_package_zip_source(package_zip_loader, template, expect): source, name, up_to_date = package_zip_loader.get_source(None, template) assert source.rstrip() == expect - assert name.endswith(posixpath.join(*split_template_path(template))) + assert name.endswith(os.path.join(*split_template_path(template))) assert up_to_date is None |