forked from LeenkxTeam/LNXSDK
		
	
		
			
				
	
	
		
			45 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			45 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
import importlib
 | 
						|
import sys
 | 
						|
import types
 | 
						|
 | 
						|
# This gets cleared if this package/the __init__ module is reloaded
 | 
						|
_module_cache: dict[str, types.ModuleType] = {}
 | 
						|
 | 
						|
 | 
						|
def enable_reload(module_name: str):
 | 
						|
    """Enable reloading for the next time the module with `module_name`
 | 
						|
    is executed.
 | 
						|
    """
 | 
						|
    mod = sys.modules[module_name]
 | 
						|
    setattr(mod, module_name.replace('.', '_') + "_DO_RELOAD_MODULE", True)
 | 
						|
 | 
						|
 | 
						|
def is_reload(module_name: str) -> bool:
 | 
						|
    """True if the module  given by `module_name` should reload the
 | 
						|
    modules it imports. This is the case if `enable_reload()` was called
 | 
						|
    for the module before.
 | 
						|
    """
 | 
						|
    mod = sys.modules[module_name]
 | 
						|
    return hasattr(mod, module_name.replace('.', '_') + "_DO_RELOAD_MODULE")
 | 
						|
 | 
						|
 | 
						|
def reload_module(module: types.ModuleType) -> types.ModuleType:
 | 
						|
    """Wrapper around importlib.reload() to make sure no module is
 | 
						|
    reloaded twice.
 | 
						|
 | 
						|
    Make sure to call this function in the same order in which the
 | 
						|
    modules are imported to make sure that the reloading respects the
 | 
						|
    module dependencies. Otherwise modules could depend on other modules
 | 
						|
    that are not yet reloaded.
 | 
						|
 | 
						|
    If you import classes or functions from a module, make sure to
 | 
						|
    re-import them after the module is reloaded.
 | 
						|
    """
 | 
						|
    mod = _module_cache.get(module.__name__, None)
 | 
						|
 | 
						|
    if mod is None:
 | 
						|
        mod = importlib.reload(module)
 | 
						|
        _module_cache[module.__name__] = mod
 | 
						|
 | 
						|
    return mod
 |