repo.py: automatically import all from spack.build_systems._package_api_v1
This commit is contained in:
parent
7248ce7081
commit
1d8cb354f7
@ -79,6 +79,25 @@ def namespace_from_fullname(fullname: str) -> str:
|
|||||||
return fullname
|
return fullname
|
||||||
|
|
||||||
|
|
||||||
|
class _PrependFileLoader(importlib.machinery.SourceFileLoader):
|
||||||
|
def __init__(self, fullname: str, repo: "Repo", package_name: str) -> None:
|
||||||
|
self.repo = repo
|
||||||
|
self.package_name = package_name
|
||||||
|
path = repo.filename_for_package_name(package_name)
|
||||||
|
self.fullname = fullname
|
||||||
|
self.prepend = b"from spack.build_systems._package_api_v1 import *\n"
|
||||||
|
super().__init__(self.fullname, path)
|
||||||
|
|
||||||
|
def path_stats(self, path):
|
||||||
|
stats = dict(super().path_stats(path))
|
||||||
|
stats["size"] += len(self.prepend) + 1
|
||||||
|
return stats
|
||||||
|
|
||||||
|
def get_data(self, path):
|
||||||
|
data = super().get_data(path)
|
||||||
|
return self.prepend + data if path == self.path else data
|
||||||
|
|
||||||
|
|
||||||
class SpackNamespaceLoader:
|
class SpackNamespaceLoader:
|
||||||
def create_module(self, spec):
|
def create_module(self, spec):
|
||||||
return SpackNamespace(spec.name)
|
return SpackNamespace(spec.name)
|
||||||
@ -125,8 +144,7 @@ def compute_loader(self, fullname: str):
|
|||||||
# With 2 nested conditionals we can call "repo.real_name" only once
|
# With 2 nested conditionals we can call "repo.real_name" only once
|
||||||
package_name = repo.real_name(module_name)
|
package_name = repo.real_name(module_name)
|
||||||
if package_name:
|
if package_name:
|
||||||
module_path = repo.filename_for_package_name(package_name)
|
return _PrependFileLoader(fullname, repo, package_name)
|
||||||
return importlib.machinery.SourceFileLoader(fullname, module_path)
|
|
||||||
|
|
||||||
# We are importing a full namespace like 'spack.pkg.builtin'
|
# We are importing a full namespace like 'spack.pkg.builtin'
|
||||||
if fullname == repo.full_namespace:
|
if fullname == repo.full_namespace:
|
||||||
|
Loading…
Reference in New Issue
Block a user