mirror of
https://github.com/python/cpython.git
synced 2025-10-09 08:31:26 +00:00
Implement PEP 451 (ModuleSpec).
This commit is contained in:
parent
9e6097ebe7
commit
b523f8433a
37 changed files with 6972 additions and 4387 deletions
|
@ -430,6 +430,7 @@ def iter_importers(fullname=""):
|
|||
for item in path:
|
||||
yield get_importer(item)
|
||||
|
||||
|
||||
def get_loader(module_or_name):
|
||||
"""Get a PEP 302 "loader" object for module_or_name
|
||||
|
||||
|
@ -570,6 +571,7 @@ def extend_path(path, name):
|
|||
|
||||
return path
|
||||
|
||||
|
||||
def get_data(package, resource):
|
||||
"""Get a resource from a package.
|
||||
|
||||
|
@ -592,10 +594,15 @@ def get_data(package, resource):
|
|||
which does not support get_data(), then None is returned.
|
||||
"""
|
||||
|
||||
loader = get_loader(package)
|
||||
spec = importlib.find_spec(package)
|
||||
if spec is None:
|
||||
return None
|
||||
loader = spec.loader
|
||||
if loader is None or not hasattr(loader, 'get_data'):
|
||||
return None
|
||||
mod = sys.modules.get(package) or loader.load_module(package)
|
||||
# XXX needs test
|
||||
mod = (sys.modules.get(package) or
|
||||
importlib._bootstrap._SpecMethods(spec).load())
|
||||
if mod is None or not hasattr(mod, '__file__'):
|
||||
return None
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue