diff options
Diffstat (limited to 'src/py/mod.py')
-rw-r--r-- | src/py/mod.py | 50 |
1 files changed, 26 insertions, 24 deletions
diff --git a/src/py/mod.py b/src/py/mod.py index c41b839..e67a9e6 100644 --- a/src/py/mod.py +++ b/src/py/mod.py @@ -1,33 +1,35 @@ import sys +import re; +import importlib from importlib import import_module +from importlib.abc import MetaPathFinder +import importlib.machinery -mod_info = {} +mod = sys.modules[__name__] +mod_list = {} -def load(mod_name, mod_path, *args): - if( - mod_name in mod_info or - mod_path in sys.modules - ): - raise NameError +class SqmodFinder(MetaPathFinder): + def find_module(fullname,path): + if not fullname.startswith('sqmod/'): + return None - instance = import_module(mod_path, "") - instance.load(*args) - mod_info[mod_name] = [instance, args, mod_path] - return instance + return importlib.machinery.SourceFileLoader(fullname,fullname + '.py') -def reload(mod_name): - instance, args, mod_path = mod_info[mod_name] - instance = import_module(mod_path, "") - instance.load(*args) - mod_info[mod_name][0] = instance - return instance +def load(name,path,*args): + instance = import_module(path,'') + mod_list[name] = instance + setattr(mod,name,getattr(instance,name)(*args)) +def unload(name): + getattr(mod,name).unload() + delattr(mod,name) + del mod_list[name] -def unload(mod_name): - instance, args, mod_path = mod_info[mod_name] - instance.unload() - del sys.modules[mod_path] - del mod_info[mod_name] +def load_sqmod(sqmodname): + print(sqmodname) -def list_mod(): - print(list(mod_info.keys())) + instance = import_module(''.join(['sqmod/',sqmodname,'/py/',sqmodname])) + + return getattr(instance,sqmodname) + +sys.meta_path.append(SqmodFinder) |