diff options
Diffstat (limited to 'release/scripts/modules/bpy_extras/keyconfig_utils_experimental.py')
-rw-r--r-- | release/scripts/modules/bpy_extras/keyconfig_utils_experimental.py | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/release/scripts/modules/bpy_extras/keyconfig_utils_experimental.py b/release/scripts/modules/bpy_extras/keyconfig_utils_experimental.py index cd82460e8e0..b93da5ec6da 100644 --- a/release/scripts/modules/bpy_extras/keyconfig_utils_experimental.py +++ b/release/scripts/modules/bpy_extras/keyconfig_utils_experimental.py @@ -21,6 +21,7 @@ __all__ = ( "keyconfig_export_as_data", "keyconfig_import_from_data", + "keyconfig_module_from_preset", ) @@ -242,3 +243,22 @@ def keyconfig_import_from_data(name, keyconfig_data): kmi_props = kmi.properties for attr, value in kmi_props_data: kmi_props_setattr(kmi_props, attr, value) + + +def keyconfig_module_from_preset(name, preset_reference_filename=None): + import os + import importlib.util + if preset_reference_filename is not None: + preset_path = os.path.join(os.path.dirname(preset_reference_filename), name + ".py") + else: + preset_path = None + + # External presets may want to re-use other presets too. + if not (preset_path and os.path.exists(preset_path)): + preset_path = bpy.utils.preset_find(name, "keyconfig") + + # module name isn't used or added to 'sys.modules'. + mod_spec = importlib.util.spec_from_file_location("__bl_keymap__", preset_path) + mod = importlib.util.module_from_spec(mod_spec) + mod_spec.loader.exec_module(mod) + return mod |