From d1dc5e0a53c5a3484b7d20eb3a9847b53a227791 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 25 Jul 2017 17:34:34 +1000 Subject: PyAPI: utility for creating register, unregister This simplifies creation of register, unregister functions that simply forward calls submodules. --- release/scripts/modules/bpy/utils/__init__.py | 42 +++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) (limited to 'release/scripts/modules/bpy') diff --git a/release/scripts/modules/bpy/utils/__init__.py b/release/scripts/modules/bpy/utils/__init__.py index 1d555ae7123..703a61f72f5 100644 --- a/release/scripts/modules/bpy/utils/__init__.py +++ b/release/scripts/modules/bpy/utils/__init__.py @@ -37,6 +37,7 @@ __all__ = ( "register_module", "register_manual_map", "unregister_manual_map", + "register_submodule_factory", "make_rna_paths", "manual_map", "previews", @@ -684,6 +685,47 @@ def unregister_module(module, verbose=False): print("done.\n") +def register_submodule_factory(module_name, submodule_names): + """ + Utility function to create register and unregister functions + which simply load submodules, + calling their register & unregister functions. + + .. note:: + + Modules are registered in the order given, + unregistered in reverse order. + + :arg module_name: The module name, typically ``__name__``. + :type module_name: string + :arg submodule_names: List of submodule names to load and unload. + :type submodule_names: list of strings + :return: register and unregister functions. + :rtype: tuple pair of functions + """ + + module = None + submodules = [] + + def register(): + nonlocal module + module = __import__(name=module_name, fromlist=submodule_names) + submodules[:] = [getattr(module, name) for name in submodule_names] + for mod in submodules: + mod.register() + + def unregister(): + from sys import modules + for mod in reversed(submodules): + mod.unregister() + name = mod.__name__ + delattr(module, name.partition(".")[2]) + del modules[name] + submodules.clear() + + return register, unregister + + # ----------------------------------------------------------------------------- # Manual lookups, each function has to return a basepath and a sequence # of... -- cgit v1.2.3