Beispiel #1
0
class PublishingElement(Element):
    """
        >>> pub.subscribe(sub.handle_event)
        >>> pub.publish(Event())
    """
    def __init__(self):
        super(PublishingElement, self).__init__()
        self.pubsub_router = Router()

    # Subscribe/Publish Paradigm
    def subscribe(self, callback, event_cls=None):
        """
            Parameters
            ----------
            callback : callable
                Handler called when publishing an event
            event_cls : Event Class (optional)
                Type of Event to register the handler. If omitted, it will default to all Events
        """
        if event_cls is None:
            event_cls = Event
        self.pubsub_router.bind(event_cls, callback, 'event')

    def publish(self, event):
        """
            Note, this is called by Component.broadcast
        """
        self.pubsub_router.send(event)
Beispiel #2
0
    def test_router_logging_off(self):
        """
            Test that turning off logging works like normal.
        """
        r = Router(logging=False)
        # test binding

        sevt = SourceEvent()
        r.send(sevt)
        assert len(r.logs) == 0

        # we bind send to the old def send()
        assert r.send == r._send
Beispiel #3
0
    def test_router_logging(self):
        """
            Test that logging works for router
        """
        r = Router(logging=True)
        # test binding

        sevt = SourceEvent()
        r.send(sevt)
        assert r.logs[0] is sevt

        sevt2 = SourceEvent()
        r.send(sevt2)
        assert r.logs[1] is sevt2
Beispiel #4
0
    def test_router_start_logging(self):
        """
            Test that we can turn the logging on
        """
        r = Router(logging=False)
        assert r.send == r._send

        sevt = SourceEvent()
        r.send(sevt)
        assert len(r.logs) == 0

        r.start_logging()

        sevt2 = SourceEvent()
        r.send(sevt2)
        assert r.logs[0] is sevt2
Beispiel #5
0
    def test_router_queue(self):
        """
            Testing that broadcasting during event propogation gets queued properly
        """
        r = Router()
        # test binding
        logger = LoggingObj(r)
        logger.handle_source_event = MagicMock(side_effect=logger.handle_source_event)
        logger.handle_event = MagicMock(side_effect=logger.handle_event)
        r.bind(SourceEvent, logger.handle_source_event, "event")
        r.bind(be.Event, logger.handle_event, "event")

        sevt = SourceEvent()
        r.send(sevt)
        logger.handle_source_event.assert_called_once_with(sevt)
        # called once for SourceEvent and TestEvent
        assert logger.handle_event.call_count == 2
        assert isinstance(logger.logs[1], TestEvent)
Beispiel #6
0
    def test_router(self):
        r = Router()
        # test binding
        comp = MagicMock()

        r.bind(SourceEvent, comp.handle_source_event, "event")
        r.bind(be.Event, comp.handle_event, "event")

        sevt = SourceEvent()
        r.send(sevt)
        # assert that SourceEvent triggers both handlers
        comp.handle_source_event.assert_called_once_with(sevt)
        comp.handle_event.assert_called_once_with(sevt)

        evt = be.Event()
        r.send(evt)
        # assert be.Event only triggers handle_event
        assert comp.handle_source_event.call_count == 1
        assert comp.handle_event.call_count == 2