From f3ac154fe2bffb0148b12adb5ad9dce763383775 Mon Sep 17 00:00:00 2001 From: jesopo Date: Sun, 9 Feb 2020 10:15:08 +0000 Subject: add ModuleManager.try_reload_module(), use it for !reloadmodule --- src/ModuleManager.py | 14 ++++++++++++++ src/core_modules/modules.py | 8 ++------ 2 files changed, 16 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/ModuleManager.py b/src/ModuleManager.py index 2ad086ea..b8dcd107 100644 --- a/src/ModuleManager.py +++ b/src/ModuleManager.py @@ -402,6 +402,20 @@ class ModuleManager(object): [loaded_module.name, ", ".join([str(referrer) for referrer in referrers])]) + def try_reload_module(self, bot: "IRCBot.Bot", name: str): + loaded_module = self.modules.pop(name) + loaded_module.module.on_pause() + + new_definition = self.find_module(name) + try: + self.load_module(bot, new_definition) + except: + loaded_module.module.on_resume() + self.modules[name] = loaded_module + raise + + self._unload_module(loaded_module) + def try_reload_modules(self, bot: "IRCBot.Bot", whitelist: typing.List[str], blacklist: typing.List[str]): loadable, nonloadable = self._list_valid_modules( diff --git a/src/core_modules/modules.py b/src/core_modules/modules.py index e3acdcef..f6d19fe3 100644 --- a/src/core_modules/modules.py +++ b/src/core_modules/modules.py @@ -68,18 +68,14 @@ class Module(ModuleManager.BaseModule): self._catch(name, lambda: self.bot.modules.unload_module(name)) event["stdout"].write("Unloaded '%s'" % name) - def _reload(self, name): - self.bot.modules.unload_module(name) - definition = self._catch(name, - lambda: self.bot.modules.find_module(name)) - self.bot.modules.load_module(self.bot, definition) @utils.hook("received.command.reloadmodule") @utils.kwarg("help", "Reload a module") @utils.kwarg("permission", "reloadmodule") @utils.spec("!wordlower") def reload(self, event): name = event["spec"][0] - self._catch(name, lambda: self._reload(name)) + self._catch(name, + lambda: self.bot.modules.try_reload_module(self.bot, name)) event["stdout"].write("Reloaded '%s'" % name) @utils.hook("received.command.reloadallmodules") -- cgit v1.3.1-10-gc9f91