diff options
author | David Lord <davidism@gmail.com> | 2020-03-30 12:55:40 -0700 |
---|---|---|
committer | David Lord <davidism@gmail.com> | 2020-03-30 12:55:40 -0700 |
commit | c0675781a569b4d54f23ecbfcc6d4730d11ded01 (patch) | |
tree | 3faf870963786755075d2332b9193dc74225f399 | |
parent | a524e77eec22589e4e657550233a5c3bcf24d046 (diff) | |
download | jinja-c0675781a569b4d54f23ecbfcc6d4730d11ded01.tar.gz |
add changelog and cleanup for pep 451 support
-rw-r--r-- | CHANGES.rst | 2 | ||||
-rw-r--r-- | src/jinja2/loaders.py | 12 | ||||
-rw-r--r-- | tests/test_loader.py | 21 |
3 files changed, 15 insertions, 20 deletions
diff --git a/CHANGES.rst b/CHANGES.rst index 580d411e..1911ab40 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -9,6 +9,8 @@ Unreleased - Bump MarkupSafe dependency to >=1.1. - Bump Babel optional dependency to >=2.1. - Remove code that was marked deprecated. +- Use :pep:`451` API to load templates with + :class:`~loaders.PackageLoader`. :issue:`1168` 2.11.2 diff --git a/src/jinja2/loaders.py b/src/jinja2/loaders.py index ca42b7fa..6e546c00 100644 --- a/src/jinja2/loaders.py +++ b/src/jinja2/loaders.py @@ -255,17 +255,17 @@ class PackageLoader(BaseLoader): # packages work, otherwise get_loader returns None. import_module(package_name) spec = importlib.util.find_spec(package_name) - self._loader = spec.loader - + self._loader = loader = spec.loader self._archive = None self._template_root = None - if isinstance(spec.loader, zipimport.zipimporter): - self._archive = spec.loader.archive + + if isinstance(loader, zipimport.zipimporter): + self._archive = loader.archive pkgdir = next(iter(spec.submodule_search_locations)) self._template_root = os.path.join(pkgdir, package_path) elif spec.submodule_search_locations: - # this will be one element for "packages" and multiple for - # namespace packages + # This will be one element for regular packages and multiple + # for namespace packages. for root in spec.submodule_search_locations: root = os.path.join(root, package_path) diff --git a/tests/test_loader.py b/tests/test_loader.py index d3fe61eb..8ca1289a 100644 --- a/tests/test_loader.py +++ b/tests/test_loader.py @@ -352,21 +352,13 @@ def test_package_zip_list(package_zip_loader): assert package_zip_loader.list_templates() == ["foo/test.html", "test.html"] -def test_pep_451_import_hook(tmp_path): - package_name = "_my_pep451_pkg" - pkg = tmp_path.joinpath(package_name) - pkg.mkdir() - pkg.joinpath("__init__.py").touch() - templates = pkg.joinpath("templates") - templates.mkdir() - templates.joinpath("foo.html").write_text("hello world") - +def test_pep_451_import_hook(): class ImportHook(importlib.abc.MetaPathFinder, importlib.abc.Loader): def find_spec(self, name, path=None, target=None): - if name != package_name: + if name != "res": return None - path = [str(tmp_path)] - spec = importlib.machinery.PathFinder.find_spec(name, path=path) + + spec = importlib.machinery.PathFinder.find_spec(name) return importlib.util.spec_from_file_location( name, spec.origin, @@ -382,9 +374,10 @@ def test_pep_451_import_hook(tmp_path): # ensure we restore `sys.meta_path` after putting in our loader before = sys.meta_path[:] + try: sys.meta_path.insert(0, ImportHook()) - package_loader = PackageLoader(package_name) - assert package_loader.list_templates() == ["foo.html"] + package_loader = PackageLoader("res") + assert "test.html" in package_loader.list_templates() finally: sys.meta_path[:] = before |