def setup(self): """Called to have the addin register it's hook callbacks. This is also the place for related setup jobs like setting up custom models. If an addin does not subclass ``addins.base``, it must provide this method itself. """ # register new hook that the addin wants to define if hasattr(self, 'get_hooks'): new_hooks = self.get_hooks() if hooks: for name in new_hooks: hooks.register(name) # auto-register all hook callbacks ('on_*'-pattern) for name in dir(self): if name.startswith('on_'): attr = getattr(self, name) if isinstance(attr, types.MethodType): try: hooks.add_callback(name[3:], attr) except KeyError, e: raise RuntimeError(('%s: failed to initialize ' 'because %s method does not refer to a valid ' 'hook (%s).') % (self.__class__, name, e))
def test_exists(): """Test the exists() function. """ hooks.reset() assert hooks.exists("alien_invasion") == True assert hooks.exists("worldpeace") == False hooks.register("worldpeace") assert hooks.exists("worldpeace") == True hooks.reset() assert hooks.exists("worldpeace") == False
def test_reset(): # reset() was already used throughout previous tests, # but for good measure, do it specifically. # callback is no longer registered after a reset hooks.add_callback("alien_invasion", lambda: 42) hooks.reset() assert hooks.trigger("alien_invasion") == None # custom hook is gone after a reset hooks.register("i_love_you") hooks.reset() assert_raises(Exception, hooks.add_callback, "i_love_you", lambda: None)
def test_custom(): """Test custom, non-default hooks. """ # this fails, hook doesn't yet exist assert_raises(Exception, hooks.add_callback, "i_love_you", lambda: None) assert_raises(Exception, hooks.trigger, "i_love_you") # after we register the hook, it works hooks.register("i_love_you") hooks.add_callback("i_love_you", lambda: None) hooks.trigger("i_love_you") # registering the same hook multiple times is a no-op hooks.register("i_love_you") hooks.register("i_love_you")