def register(self, plugin):
        """Take a feather.plugin.Plugin and tell our dispatcher about it.

        Plugins are expected to provide a list of the messages that they
        listen for and generate. If registering this plugin makes it so we have
        at least one plugin listening for and generating our expected messages,
        set self.valid to true
        """
        self.needed_listeners -= plugin.listeners
        self.needed_messengers -= plugin.messengers

        if self.needed_messengers == self.needed_listeners == set():
            self.valid = True

        self.dispatcher.register(plugin)
def register ( self , plugin ) : self . needed_listeners -= plugin . listeners self . needed_messengers -= plugin . messengers if self . needed_messengers == self . needed_listeners == set ( ) : self . valid = True self . dispatcher . register ( plugin )
Take a feather.plugin.Plugin and tell our dispatcher about it.

        Plugins are expected to provide a list of the messages that they
        listen for and generate. If registering this plugin makes it so we have
        at least one plugin listening for and generating our expected messages,
        set self.valid to true