]> git.ipfire.org Git - thirdparty/jinja.git/commitdiff
add changelog and cleanup for pep 451 support 1169/head
authorDavid Lord <davidism@gmail.com>
Mon, 30 Mar 2020 19:55:40 +0000 (12:55 -0700)
committerDavid Lord <davidism@gmail.com>
Mon, 30 Mar 2020 19:55:40 +0000 (12:55 -0700)
CHANGES.rst
src/jinja2/loaders.py
tests/test_loader.py

index 580d411ee24c0ea99716a0a3072c5405c6aedc49..1911ab40da3ebfaed682917810efbedf559eb429 100644 (file)
@@ -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
index ca42b7fa6a3cc372eed91f49f79fb0dcd3d8d3a9..6e546c00b31f3b98fbc36bef83795690a782c15f 100644 (file)
@@ -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)
 
index d3fe61eb7bcac06b6f4e212c46918204114ef86b..8ca1289a2710854e03b8ca357e5c1bcc22965809 100644 (file)
@@ -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