hackily sorta got imp.find_module to load module_utils but it breaks further package discovery, needs fix
This commit is contained in:
parent
955e77c5db
commit
afd8902d6b
|
@ -700,24 +700,26 @@ class ParentEnumerationMethod(FinderMethod):
|
||||||
return path, source, is_pkg
|
return path, source, is_pkg
|
||||||
|
|
||||||
def _find_one_component(self, modname, search_path):
|
def _find_one_component(self, modname, search_path):
|
||||||
|
"""
|
||||||
|
Creates an __init__.py if one doesn't exist in the search path dirs for ansible collections
|
||||||
|
This will help imp load packages like `.ansible/collections/ansible_collections/.....plugins/module_utils`
|
||||||
|
that don't get loaded from Ansible via sys.modules
|
||||||
|
Unfortunately this leaves __init__.py files around in collections that don't have them
|
||||||
|
TODO: delete these when Mitogen exits?
|
||||||
|
Tried to hack types.ModuleType instead but no luck
|
||||||
|
Appears imp loads modules old-style with a required __init__.py
|
||||||
|
TODO: can the __init__ stuff be moved to ansible_mitogen somewhere, really want it to be there instead
|
||||||
|
"""
|
||||||
|
for path in search_path:
|
||||||
|
if "collections/ansible_collections" in path:
|
||||||
|
init_file = os.path.join(path, modname, "__init__.py")
|
||||||
|
if not os.path.isfile(init_file):
|
||||||
|
with open(init_file, "w") as f:
|
||||||
|
pass
|
||||||
|
|
||||||
try:
|
try:
|
||||||
#fp, path, (suffix, _, kind) = imp.find_module(modname, search_path)
|
#fp, path, (suffix, _, kind) = imp.find_module(modname, search_path)
|
||||||
# if modname == "ansible_collections":
|
return imp.find_module(modname, search_path)
|
||||||
# print(dir(sys.modules['ansible_collections']))
|
|
||||||
# A
|
|
||||||
# taco
|
|
||||||
# filename = sys.modules['ansible_collections'].__file__ + ".py"
|
|
||||||
# return open(filename), filename, ('.py', 'r', imp.PY_SOURCE)
|
|
||||||
# regular imp.find_module doesn't work here, but perhaps we can try the loader?
|
|
||||||
|
|
||||||
if modname.startswith("ansible_collections"):
|
|
||||||
try:
|
|
||||||
return imp.find_module(modname, search_path)
|
|
||||||
except ImportError:
|
|
||||||
# `touch search_path/__init__.py` works in this case
|
|
||||||
# TODO
|
|
||||||
else:
|
|
||||||
return imp.find_module(modname, search_path)
|
|
||||||
except ImportError:
|
except ImportError:
|
||||||
e = sys.exc_info()[1]
|
e = sys.exc_info()[1]
|
||||||
LOG.debug('%r: imp.find_module(%r, %r) -> %s',
|
LOG.debug('%r: imp.find_module(%r, %r) -> %s',
|
||||||
|
|
Loading…
Reference in New Issue