summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Lord <davidism@gmail.com>2022-03-25 15:26:46 -0700
committerGitHub <noreply@github.com>2022-03-25 15:26:46 -0700
commitf3db5f4b40bf198db86d269d077cae020c0a6648 (patch)
treecbfb31714a2e716b0dc7e4db055854b5f3ff4c5a
parent155e51d90b0c894194cd544ef1e5f5f3838c08a6 (diff)
parent1b02fccaf4158caf5b6cf31cdfe203a4e9079ee8 (diff)
downloadjinja2-f3db5f4b40bf198db86d269d077cae020c0a6648.tar.gz
Merge pull request #1638 from pallets/windows-altsep
normpath on final template filename
-rw-r--r--CHANGES.rst3
-rw-r--r--src/jinja2/loaders.py10
-rw-r--r--tests/test_loader.py16
3 files changed, 22 insertions, 7 deletions
diff --git a/CHANGES.rst b/CHANGES.rst
index afc86e5..4cc30f1 100644
--- a/CHANGES.rst
+++ b/CHANGES.rst
@@ -5,6 +5,9 @@ Version 3.1.1
Unreleased
+- 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