Source code for simstack.core.find_simstack_modules
import importlib
import pkgutil
from importlib.metadata import entry_points
from logging import getLogger
logger = getLogger("find_simstack_modules")
[docs]
def walk_packages(package_name, all_modules):
"""Walk through all packages and modules."""
try:
package = importlib.import_module(package_name)
package_path = package.__path__
logger.info(f"Package: {package_name}")
# print(f"Path: {package_path}")
for importer, modname, ispkg in pkgutil.walk_packages(
package_path, prefix=f"{package_name}."
):
if ispkg:
logger.debug(f" Subpackage: {modname}")
else:
logger.debug(f" Module: {modname}")
# Split module name by periods
all_modules.append(modname)
except Exception as e:
logger.error(f"Error walking {package_name}: {e}")
[docs]
def find_simstack_modules():
"""Find all packages and modules within the simstack package."""
all_modules = []
entry_point_list = entry_points(group="simstack.modules")
logger.info(f"Entry points for simstack modules: {entry_point_list}.")
for entry_point in entry_point_list:
walk_packages(entry_point.value, all_modules)
return all_modules