diff options
author | David Lord <davidism@gmail.com> | 2020-03-30 09:55:51 -0700 |
---|---|---|
committer | David Lord <davidism@gmail.com> | 2020-03-30 09:55:51 -0700 |
commit | cf53e2254dd316327a4d54f6f11801714c5af3a7 (patch) | |
tree | a808dd7965d0b4686c2e72142e2783387d7abf24 /src/jinja2/loaders.py | |
parent | 41ed50c805ac04252cdc094db216977d70e7c0da (diff) | |
download | jinja2-cf53e2254dd316327a4d54f6f11801714c5af3a7.tar.gz |
Revert "PackageLoader understands namespace packages"
This reverts commit d2e0e78afe7c6ae864a20c2cc29e80936cff47af.
Diffstat (limited to 'src/jinja2/loaders.py')
-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)) |