Skip to content

Commit

Permalink
As much as I hate this, we can't, currently, only include namespaced …
Browse files Browse the repository at this point in the history
…funcs in ``__utils__``

!@#$%@!#@$%!$@#$T

Signed-off-by: Pedro Algarvio <palgarvio@vmware.com>
  • Loading branch information
s0undt3ch authored and Megan Wilhite committed Jun 29, 2022
1 parent 97afb78 commit 29d66ec
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 7 deletions.
1 change: 1 addition & 0 deletions salt/loader/__init__.py
Expand Up @@ -484,6 +484,7 @@ def utils(
pack={"__context__": context, "__proxy__": proxy or {}},
pack_self=pack_self,
loaded_base_name=loaded_base_name,
_only_pack_properly_namespaced_functions=False,
)


Expand Down
15 changes: 10 additions & 5 deletions salt/loader/lazy.py
Expand Up @@ -230,6 +230,8 @@ def __init__(
virtual_funcs=None,
extra_module_dirs=None,
pack_self=None,
# Once we get rid of __utils__, the keyword argument bellow should be removed
_only_pack_properly_namespaced_functions=True,
): # pylint: disable=W0231
"""
In pack, if any of the values are None they will be replaced with an
Expand Down Expand Up @@ -258,11 +260,11 @@ def __init__(
self.module_dirs = module_dirs
self.tag = tag
self._gc_finalizer = None
if loaded_base_name and loaded_base_name != LOADED_BASE_NAME:
self.loaded_base_name = loaded_base_name
else:
self.loaded_base_name = LOADED_BASE_NAME
self.loaded_base_name = loaded_base_name or LOADED_BASE_NAME
self.mod_type_check = mod_type_check or _mod_type
self._only_pack_properly_namespaced_functions = (
_only_pack_properly_namespaced_functions
)

if "__context__" not in self.pack:
self.pack["__context__"] = None
Expand Down Expand Up @@ -974,7 +976,10 @@ def _load_module(self, name):
# Not a function!? Skip it!!!
continue

if not func.__module__.startswith(self.loaded_base_name):
if (
self._only_pack_properly_namespaced_functions
and not func.__module__.startswith(self.loaded_base_name)
):
# We're not interested in imported functions, only
# functions defined(or namespaced) on the loaded module.
continue
Expand Down
14 changes: 12 additions & 2 deletions tests/pytests/functional/loader/test_loaded_base_name.py
Expand Up @@ -84,11 +84,21 @@ def test_loader(loader, loaded_base_name):
if not isinstance(loader, LazyLoader):
for loaded_func in loader.values():
loader = loaded_func.loader
loader_tag = loader.tag
assert loader.loaded_base_name == loaded_base_name
module_name = loaded_func.func.__module__
assert module_name.startswith(loaded_base_name)
try:
assert module_name.startswith(loaded_base_name)
except AssertionError:
if loader_tag != "utils":
raise
else:
loader_tag = loader.tag
assert loader.loaded_base_name == loaded_base_name
for func_name in list(loader._dict):
module_name = loader[func_name].__module__
assert module_name.startswith(loaded_base_name)
try:
assert module_name.startswith(loaded_base_name)
except AssertionError:
if loader_tag != "utils":
raise

0 comments on commit 29d66ec

Please sign in to comment.