Files
open-wc/reference/blender-wow-studio-3.4-1.1.0_Experimental/io_scene_wmo/developer_utils.py
T

49 lines
1.5 KiB
Python

import os
import pkgutil
import importlib
modules_to_ignore = ["test"]
def setup_addon_modules(path, package_name, reload):
"""
Imports and reloads all modules in this addon.
path -- __path__ from __init__.py
package_name -- __name__ from __init__.py
Individual modules can define a __reload_order_index__ property which
will be used to reload the modules in a specific order. The default is 1.
"""
def get_submodule_names(path=path[0], root=""):
module_names = []
for importer, module_name, is_package in pkgutil.iter_modules([path]):
if module_name in modules_to_ignore:
continue
if is_package:
sub_path = os.path.join(path, module_name)
sub_root = root + module_name + "."
module_names.extend(get_submodule_names(sub_path, sub_root))
else:
module_names.append(root + module_name)
return module_names
def import_submodules(names):
modules = []
for name in names:
if name in modules_to_ignore:
continue
modules.append(importlib.import_module("." + name, package_name))
return modules
def reload_modules(modules):
modules.sort(key=lambda module: getattr(module, "__reload_order_index__", 1))
for module in modules:
importlib.reload(module)
names = get_submodule_names()
modules = import_submodules(names)
if reload:
reload_modules(modules)
return modules