summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Lord <davidism@gmail.com>2020-03-30 09:55:51 -0700
committerDavid Lord <davidism@gmail.com>2020-03-30 09:55:51 -0700
commitcf53e2254dd316327a4d54f6f11801714c5af3a7 (patch)
treea808dd7965d0b4686c2e72142e2783387d7abf24
parent41ed50c805ac04252cdc094db216977d70e7c0da (diff)
downloadjinja2-cf53e2254dd316327a4d54f6f11801714c5af3a7.tar.gz
Revert "PackageLoader understands namespace packages"
This reverts commit d2e0e78afe7c6ae864a20c2cc29e80936cff47af.
-rw-r--r--src/jinja2/loaders.py47
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))