Relocate open() in plugins

This commit is contained in:
Maxim Khomutov 2023-07-15 02:17:00 +03:00
parent 64ce662d04
commit a5202edf83

View File

@ -63,26 +63,38 @@ class KuiToi:
class PluginsLoader: class PluginsLoader:
def __init__(self, plugins_dir): def __init__(self, plugins_dir):
self.__plugins = {} self.plugins = {}
self.__plugins_dir = plugins_dir self.plugins_dir = plugins_dir
self.log = get_logger("PluginsLoader") self.log = get_logger("PluginsLoader")
def load_plugins(self): def load_plugins(self):
self.log.debug("Loading plugins...") self.log.debug("Loading plugins...")
files = os.listdir(self.__plugins_dir) files = os.listdir(self.plugins_dir)
for file in files: for file in files:
if file.endswith(".py"): if file.endswith(".py"):
try: try:
self.log.debug(f"Loading plugin: {file}") self.log.debug(f"Loading plugin: {file[:-3]}")
plugin = types.ModuleType('plugin') plugin = types.ModuleType(file[:-3])
plugin.KuiToi = KuiToi plugin.KuiToi = KuiToi
plugin.KuiToi._plugins_dir = self.plugins_dir
plugin.kt = None
plugin.print = print plugin.print = print
file = os.path.join(self.__plugins_dir, file) file_path = os.path.join(self.plugins_dir, file)
with open(f'{file}', 'r') as f: plugin.__file__ = file_path
code = f.read().replace("import KuiToi\n", "") with open(f'{file_path}', 'r') as f:
code = f.read()
exec(code, plugin.__dict__) exec(code, plugin.__dict__)
if type(plugin.kt) != KuiToi:
raise AttributeError(f'Attribute "kt" isn\'t KuiToi class. Plugin file: "{file_path}"')
pl_name = plugin.kt.name
if self.plugins.get(pl_name) is not None:
raise NameError(f'Having plugins with identical names is not allowed; '
f'Plugin name: "{pl_name}"; Plugin file "{file_path}"')
plugin.open = plugin.kt.open
plugin.load() plugin.load()
self.__plugins.update({file[:-3]: plugin}) self.plugins.update({pl_name: plugin})
self.log.debug(f"Plugin loaded: {file}") self.log.debug(f"Plugin loaded: {file}")
except Exception as e: except Exception as e:
self.log.error(f"Error loading plugin: {file}; Error: {e}") # TODO: i18n
self.log.error(f"Error while loading plugin: {file}; Error: {e}")
self.log.exception(e)