diff options
-rw-r--r-- | src/jinja2/loaders.py | 47 |
1 files changed, 8 insertions, 39 deletions
diff --git a/src/jinja2/loaders.py b/src/jinja2/loaders.py index ce5537a..d057ad5 100644 --- a/src/jinja2/loaders.py +++ b/src/jinja2/loaders.py @@ -7,7 +7,6 @@ import pkgutil import sys import weakref from hashlib import sha1 -from importlib import import_module from os import path from types import ModuleType @@ -237,16 +236,8 @@ class PackageLoader(BaseLoader): introspecting data in packages is too limited to support other installation methods the way this loader requires. - There is limited support for :pep:`420` namespace packages. The - template directory is assumed to only be in one namespace - contributor. Zip files contributing to a namespace are not - supported. - .. versionchanged:: 2.11.0 No longer uses ``setuptools`` as a dependency. - - .. versionchanged:: 2.11.0 - Limited PEP 420 namespace package support. """ def __init__(self, package_name, package_path="templates", encoding="utf-8"): @@ -255,40 +246,18 @@ class PackageLoader(BaseLoader): elif package_path[:2] == os.path.curdir + os.path.sep: package_path = package_path[2:] - package_path = os.path.normpath(package_path).rstrip(os.path.sep) - self.package_path = package_path + package_path = os.path.normpath(package_path) + self.package_name = package_name + self.package_path = package_path self.encoding = encoding - # Make sure the package exists. This also makes namespace - # packages work, otherwise get_loader returns None. - import_module(package_name) - self._loader = loader = pkgutil.get_loader(package_name) - + self._loader = pkgutil.get_loader(package_name) # Zip loader's archive attribute points at the zip. - self._archive = getattr(loader, "archive", None) - self._template_root = None - - if hasattr(loader, "get_filename"): - # A standard directory package, or a zip package. - self._template_root = os.path.join( - os.path.dirname(loader.get_filename(package_name)), package_path - ) - elif hasattr(loader, "_path"): - # A namespace package, limited support. Find the first - # contributor with the template directory. - for root in loader._path: - root = os.path.join(root, package_path) - - if os.path.isdir(root): - self._template_root = root - break - - if self._template_root is None: - raise ValueError( - "The %r package was not installed in a way that" - " PackageLoader understands." % package_name - ) + self._archive = getattr(self._loader, "archive", None) + self._template_root = os.path.join( + os.path.dirname(self._loader.get_filename(package_name)), package_path + ).rstrip(os.path.sep) def get_source(self, environment, template): p = os.path.join(self._template_root, *split_template_path(template)) |