summaryrefslogtreecommitdiffstats
path: root/Lib/importlib/_common.py
diff options
context:
space:
mode:
authorJason R. Coombs <jaraco@jaraco.com>2021-03-04 18:43:00 (GMT)
committerGitHub <noreply@github.com>2021-03-04 18:43:00 (GMT)
commit67148254146948041a77d8a2989f41b88cdb2f99 (patch)
tree036bcb818e80090b34f0c59f57f8b6946b52b21d /Lib/importlib/_common.py
parentfbf75b9997e280b1220755d0a17dbed71240d42e (diff)
downloadcpython-67148254146948041a77d8a2989f41b88cdb2f99.zip
cpython-67148254146948041a77d8a2989f41b88cdb2f99.tar.gz
cpython-67148254146948041a77d8a2989f41b88cdb2f99.tar.bz2
bpo-42129: Add support for resources in namespaces (GH-24670)
* Unify behavior in ResourceReaderDefaultsTests and align with the behavior found in importlib_resources. * Equip NamespaceLoader with a NamespaceReader. * Apply changes from importlib_resources 5.0.4
Diffstat (limited to 'Lib/importlib/_common.py')
-rw-r--r--Lib/importlib/_common.py15
1 files changed, 7 insertions, 8 deletions
diff --git a/Lib/importlib/_common.py b/Lib/importlib/_common.py
index 71ce6af..0338304 100644
--- a/Lib/importlib/_common.py
+++ b/Lib/importlib/_common.py
@@ -9,6 +9,8 @@ import importlib
from typing import Union, Any, Optional
from .abc import ResourceReader
+from ._adapters import wrap_spec
+
Package = Union[types.ModuleType, str]
@@ -43,18 +45,15 @@ def get_resource_reader(package):
# zipimport.zipimporter does not support weak references, resulting in a
# TypeError. That seems terrible.
spec = package.__spec__
- reader = getattr(spec.loader, 'get_resource_reader', None)
+ reader = getattr(spec.loader, 'get_resource_reader', None) # type: ignore
if reader is None:
return None
- return reader(spec.name)
+ return reader(spec.name) # type: ignore
def resolve(cand):
# type: (Package) -> types.ModuleType
- return (
- cand if isinstance(cand, types.ModuleType)
- else importlib.import_module(cand)
- )
+ return cand if isinstance(cand, types.ModuleType) else importlib.import_module(cand)
def get_package(package):
@@ -64,7 +63,7 @@ def get_package(package):
Raise an exception if the resolved module is not a package.
"""
resolved = resolve(package)
- if resolved.__spec__.submodule_search_locations is None:
+ if wrap_spec(resolved).submodule_search_locations is None:
raise TypeError('{!r} is not a package'.format(package))
return resolved
@@ -74,7 +73,7 @@ def from_package(package):
Return a Traversable object for the given package.
"""
- spec = package.__spec__
+ spec = wrap_spec(package)
reader = spec.loader.get_resource_reader(spec.name)
return reader.files()