示例#1
0
 def test_on_message(self) -> None:
     d = Document()
     cm = bdc.DocumentCallbackManager(d)
     def cb(x: Any) -> None:
         pass
     cm.on_message("foo", cb)
     assert cm._message_callbacks == {"foo": [cb], "bokeh_event": [cm.trigger_json_event]}
示例#2
0
 def test_on_event_good_event(self) -> None:
     d = Document()
     cm = bdc.DocumentCallbackManager(d)
     def good(event: Any) -> None:
         pass
     cm.on_event(DocumentReady, good)
     assert cm._event_callbacks == {"document_ready": [good]}
示例#3
0
 def test_on_change(self) -> None:
     d = Document()
     cm = bdc.DocumentCallbackManager(d)
     def cb(x: Any) -> None:
         pass
     cm.on_change(cb)
     assert cm._change_callbacks == {cb: cb}  # XXX !!!?
示例#4
0
    def test_remove_session_callback(self) -> None:
        d = Document()
        cm = bdc.DocumentCallbackManager(d)

        events = []

        def listener(event: DocumentChangedEvent) -> None:
            events.append(event)

        cm.on_change(listener)

        assert len(cm.session_callbacks) == 0
        assert not events

        def cb() -> None:
            pass

        obj = SessionCallback(cb, callback_id=ID("1"))

        cm.add_session_callback(obj, cb, one_shot=False)

        cm.remove_session_callback(obj)
        assert len(cm.session_callbacks) == 0
        assert len(events) == 2
        assert isinstance(events[0], SessionCallbackAdded)
        assert isinstance(events[1], SessionCallbackRemoved)
示例#5
0
    def test_hold(self, policy: HoldPolicyType) -> None:
        d = Document()
        cm = bdc.DocumentCallbackManager(d)
        assert cm.hold_value == None
        assert cm._held_events == []

        cm.hold(policy)
        assert cm.hold_value == policy
示例#6
0
 def test_on_event_bad_event(self) -> None:
     d = Document()
     cm = bdc.DocumentCallbackManager(d)
     def good(event: Any) -> None:
         pass
     with pytest.raises(ValueError):
         cm.on_event(ButtonClick, good)
     assert cm._event_callbacks == {}
示例#7
0
 def test_on_event_bad_string(self, evt: str) -> None:
     d = Document()
     cm = bdc.DocumentCallbackManager(d)
     def good(event: Any) -> None:
         pass
     with pytest.raises(ValueError):
         cm.on_event(evt, good)
     assert cm._event_callbacks == {}
示例#8
0
 def test_remove_on_change(self) -> None:
     d = Document()
     cm = bdc.DocumentCallbackManager(d)
     def cb(x: Any) -> None:
         pass
     cm.on_change(cb)
     cm.remove_on_change(cb)
     assert cm._change_callbacks == {}
示例#9
0
    def test_basic(self) -> None:
        d = Document()
        cm = bdc.DocumentCallbackManager(d)

        # module manager should only hold a weak ref
        assert len(gc.get_referrers(d)) == 0

        assert len(cm._message_callbacks) == 1
        assert cm._message_callbacks == {"bokeh_event": [cm.trigger_event]}
示例#10
0
 def test_subscribe(self) -> None:
     d = Document()
     cm = bdc.DocumentCallbackManager(d)
     m = Div()
     assert cm._subscribed_models == {}
     cm.subscribe("foo", m)
     assert "foo" in cm._subscribed_models
     assert len(cm._subscribed_models["foo"]) == 1
     mref = cm._subscribed_models["foo"].pop()
     assert mref() is m
示例#11
0
 def test_unhold_triggers_events(self, mock_trigger: MagicMock) -> None:
     d = Document()
     cm = bdc.DocumentCallbackManager(d)
     cm.hold('collect')
     last = DocumentChangedEvent(d, None)
     cm._held_events = [DocumentChangedEvent(d, None), DocumentChangedEvent(d, None), last]
     cm.unhold()
     assert mock_trigger.call_count == 3
     assert mock_trigger.call_args[0] == (last,)
     assert mock_trigger.call_args[1] == {}
示例#12
0
 def test_session_callbacks(self) -> None:
     d = Document()
     cm = bdc.DocumentCallbackManager(d)
     assert set(cm.session_callbacks) == set()
     s1 = SessionCallback(lambda: None, callback_id=ID("1"))
     cm._session_callbacks.add(s1)
     assert set(cm.session_callbacks) == {s1}
     s2 = SessionCallback(lambda: None, callback_id=ID("2"))
     cm._session_callbacks.add(s2)
     assert set(cm.session_callbacks) == {s1, s2}
示例#13
0
    def test_destroy(self) -> None:
        d = Document()
        cm = bdc.DocumentCallbackManager(d)

        cm._change_callbacks["foo"] = lambda x: None
        cm._event_callbacks["bar"] = []
        cm._message_callbacks["baz"] = []

        assert cm.destroy() is None  # type: ignore [func-returns-value]

        assert not hasattr(cm, "_change_callbacks")
        assert not hasattr(cm, "_event_callbacks")
        assert not hasattr(cm, "_messagecallbacks")
示例#14
0
 def test_on_change_dispatch_to(self) -> None:
     d = Document()
     cm = bdc.DocumentCallbackManager(d)
     called = None
     class recv:
         def _document_changed(x: Any) -> None:
             nonlocal called
             called = x
     cm.on_change_dispatch_to(recv)
     assert recv in cm._change_callbacks
     evt = DocumentChangedEvent(d)
     cm._change_callbacks[recv](evt)
     assert called == evt
示例#15
0
    def test_session_destroyed_callbacks(self) -> None:
        d = Document()
        cm = bdc.DocumentCallbackManager(d)
        assert cm.session_destroyed_callbacks == set()
        s1 = lambda x: None
        cm._session_destroyed_callbacks.add(s1)
        assert cm.session_destroyed_callbacks == {s1}
        s2 = lambda x: None
        cm._session_destroyed_callbacks.add(s2)
        assert cm.session_destroyed_callbacks == {s1, s2}

        cm.session_destroyed_callbacks = {s2}
        assert cm.session_destroyed_callbacks == {s2}
示例#16
0
 def test_notify_event(self) -> None:
     d = Document()
     cm = bdc.DocumentCallbackManager(d)
     reported_curdoc = None
     reported_foo = None
     def invoker() -> None:
         nonlocal reported_curdoc
         nonlocal reported_foo
         reported_curdoc = curdoc()
         reported_foo = 10
     m = Button()
     cm.notify_event(m, ButtonClick(m), invoker)
     assert reported_curdoc is d
     assert reported_foo == 10
示例#17
0
    def test_on_session_destroyed(self) -> None:
        d = Document()
        cm = bdc.DocumentCallbackManager(d)

        def good(session_context: Any) -> None:
            pass
        cm.on_session_destroyed(good)
        assert cm.session_destroyed_callbacks == {good}

        def bad() -> None:  # wrong signature
            pass

        with pytest.raises(ValueError):
            cm.on_session_destroyed(bad) # type: ignore  [arg-type]  # want to test bad param
示例#18
0
    def test_hold_rehold(self, first: HoldPolicyType, second: HoldPolicyType, caplog: pytest.LogCaptureFixture) -> None:
        d = Document()
        cm = bdc.DocumentCallbackManager(d)
        with caplog.at_level(logging.WARN):
            cm.hold(first)
            assert caplog.text == ""
            assert len(caplog.records) == 0

            cm.hold(first)
            assert caplog.text == ""
            assert len(caplog.records) == 0

            cm.hold(second)
            assert caplog.text.strip().endswith(f"hold already active with {first!r}, ignoring {second!r}")
            assert len(caplog.records) == 1

            cm.unhold()

            cm.hold(second)
            assert len(caplog.records) == 1
示例#19
0
 def test_hold_bad_policy(self) -> None:
     d = Document()
     cm = bdc.DocumentCallbackManager(d)
     with pytest.raises(ValueError):
         cm.hold("junk")  # type: ignore [arg-type]