def unregister(self, variables): """Unregister all willie callables in variables, and their bindings. When unloading a module, this ensures that the unloaded modules will not get called and that the objects can be garbage collected. Objects that have not been registered are ignored. Args: variables -- A list of callable objects from a willie module. """ def remove_func(func, commands): """Remove all traces of func from commands.""" for func_list in itervalues(commands): if func in func_list: func_list.remove(func) for obj in itervalues(variables): if obj in self.callables: self.callables.remove(obj) for commands in itervalues(self.commands): remove_func(obj, commands) if obj in self.shutdown_methods: try: obj(self) except Exception as e: stderr("Error calling shutdown method for module %s:%s" % (obj.__module__, e)) self.shutdown_methods.remove(obj)
def unregister(self, variables): """Unregister all willie callables in variables, and their bindings. When unloading a module, this ensures that the unloaded modules will not get called and that the objects can be garbage collected. Objects that have not been registered are ignored. Args: variables -- A list of callable objects from a willie module. """ def remove_func(func, commands): """Remove all traces of func from commands.""" for func_list in itervalues(commands): if func in func_list: func_list.remove(func) hostmask = "%s!%s@%s" % (self.nick, self.user, socket.gethostname()) willie = self.WillieWrapper(self, irc.Origin(self, hostmask, [], {})) for obj in itervalues(variables): if obj in self.callables: self.callables.remove(obj) for commands in itervalues(self.commands): remove_func(obj, commands) if obj in self.shutdown_methods: try: obj(willie) except Exception as e: stderr( "Error calling shutdown method for module %s:%s" % (obj.__module__, e) ) self.shutdown_methods.remove(obj)
def register(self, variables): """Register all willie callables. With the ``__dict__`` attribute from a Willie module, update or add the trigger commands and rules, to allow the function to be triggered, and shutdown methods, to allow the modules to be notified when willie is quitting. """ for obj in itervalues(variables): if self.is_callable(obj): self.callables.add(obj) if self.is_shutdown(obj): self.shutdown_methods.add(obj)
def clean_module(module, config): callables = [] shutdowns = [] jobs = [] for obj in itervalues(vars(module)): if callable(obj): if getattr(obj, '__name__', None) == 'shutdown': shutdowns.append(obj) elif is_triggerable(obj): clean_callable(obj, config) callables.append(obj) elif hasattr(obj, 'interval'): clean_callable(obj, config) jobs.append(obj) return callables, jobs, shutdowns
def remove_func(func, commands): """Remove all traces of func from commands.""" for func_list in itervalues(commands): if func in func_list: func_list.remove(func)