class TestMessageBus(unittest.TestCase): def setUp(self): self.bus = MessageBus() self.bus._thread_constructor = dummy_threading.Thread def test_subscribe(self): pass def test_send_message_calls_subscriber_when_filter_matches(self): listener = MockMessageHandler() message_filter = MockMessageFilter(True) self.bus.subscribe(listener, message_filter) message = Message(type="foo", source="bar") self.bus.send_message(message) self.assertEquals(message, message_filter.message) self.assertEquals(message, listener.message) def test_send_message_does_not_call_subscriber_when_filter_does_not_match(self): listener = MockMessageHandler() message_filter = MockMessageFilter(False) self.bus.subscribe(listener, message_filter) message = Message(type="foo", source="bar") self.bus.send_message(message) self.assertEquals(message, message_filter.message) self.assertIsNone(listener.message)
import logging from messagebus import Message from messagebus import PatternMessageFilter from messagebus import FunctionMessageHandler from messagebus import MessageBus def handle(message): logging.info("Handled {}".format(message)) if __name__ == "__main__": logging.basicConfig(level=logging.DEBUG) bus = MessageBus() listener = FunctionMessageHandler(handle) bus.subscribe(listener, PatternMessageFilter("foo", "bar")) message = Message(type="foo", source="bar", timestamp=1000, data={"a":"b"}) bus.send_message(message) logging.info("Done")