예제 #1
0
    def test_patch_integer_property(self):
        d = document.Document()
        assert not d.roots
        assert len(d._all_models) == 0
        root1 = SomeModelInTestDocument(foo=42)
        root2 = SomeModelInTestDocument(foo=43)
        child1 = SomeModelInTestDocument(foo=44)
        root1.child = child1
        root2.child = child1
        d.add_root(root1)
        d.add_root(root2)
        assert len(d.roots) == 2

        event1 = ModelChangedEvent(d, root1, 'foo', root1.foo, 57, 57)
        patch1, buffers = process_document_events([event1])
        d.apply_json_patch_string(patch1)

        assert root1.foo == 57

        event2 = ModelChangedEvent(d, child1, 'foo', child1.foo, 67, 67)
        patch2, buffers = process_document_events([event2])
        d.apply_json_patch_string(patch2)

        assert child1.foo == 67
예제 #2
0
 def patch_test(new_value):
     serializable_new = root1.lookup('foo').property.to_serializable(
         root1, 'foo', new_value)
     event1 = ModelChangedEvent(d, root1, 'foo', root1.foo, new_value,
                                serializable_new)
     patch1, buffers = process_document_events([event1])
     d.apply_json_patch_string(patch1)
     if isinstance(new_value, dict):
         expected = copy(new_value)
         if 'units' not in expected:
             expected['units'] = root1.foo_units
         assert expected == root1.lookup('foo').serializable_value(
             root1)
     else:
         assert new_value == root1.foo
예제 #3
0
    def test_patch_integer_property(self) -> None:
        d = document.Document()
        assert not d.roots
        assert len(d.models) == 0
        root1 = SomeModelInTestDocument(foo=42)
        root2 = SomeModelInTestDocument(foo=43)
        child1 = SomeModelInTestDocument(foo=44)
        root1.child = child1
        root2.child = child1
        d.add_root(root1)
        d.add_root(root2)
        assert len(d.roots) == 2

        event1 = ModelChangedEvent(d, root1, 'foo', 57)
        patch1 = patch_doc.create([event1]).content
        d.apply_json_patch(patch1)

        assert root1.foo == 57

        event2 = ModelChangedEvent(d, child1, 'foo', 67)
        patch2 = patch_doc.create([event2]).content
        d.apply_json_patch(patch2)

        assert child1.foo == 67
예제 #4
0
파일: viewable.py 프로젝트: jsignell/panel
 def update_model():
     update = {k: v for msg in msgs for k, v in msg.items()}
     if comm:
         for attr, new in update.items():
             setattr(model, attr, new)
             event = doc._held_events[
                 -1] if doc._held_events else None
             if (event and event.model is model
                     and event.attr == attr and event.new is new):
                 continue
             # If change did not trigger event trigger it manually
             old = getattr(model, attr)
             serializable_new = model.lookup(
                 attr).serializable_value(model)
             event = ModelChangedEvent(doc, model, attr, old, new,
                                       serializable_new)
             _combine_document_events(event, doc._held_events)
     else:
         model.update(**update)
예제 #5
0
    def test_create_then_apply_model_changed(self) -> None:
        sample = self._sample_doc()

        foos = []
        for r in sample.roots:
            foos.append(r.foo)
        assert foos == [ 2, 2 ]

        obj = next(iter(sample.roots))
        assert obj.foo == 2
        event = ModelChangedEvent(sample, obj, 'foo', 42)
        msg = proto.create("PATCH-DOC", [event])

        copy = document.Document.from_json(sample.to_json())
        msg.apply_to_document(copy)

        foos = []
        for r in copy.roots:
            foos.append(r.foo)
        foos.sort()
        assert foos == [ 2, 42 ]
예제 #6
0
 def test_create_model_changed(self) -> None:
     sample = self._sample_doc()
     obj = next(iter(sample.roots))
     event = ModelChangedEvent(sample, obj, 'foo', 42)
     proto.create("PATCH-DOC", [event])
예제 #7
0
    def test_patch_event_contains_setter(self) -> None:
        sample = self._sample_doc()
        root = None
        other_root = None
        for r in sample.roots:
            if r.child is not None:
                root = r
            else:
                other_root = r
        assert root is not None
        assert other_root is not None
        new_child = AnotherModelInTestPatchDoc(bar=56)

        cds = ColumnDataSource(data={'a': np.array([0., 1., 2.])})
        sample.add_root(cds)

        mock_session = object()
        def sample_document_callback_assert(event):
            """Asserts that setter is correctly set on event"""
            assert event.setter is mock_session
        sample.on_change(sample_document_callback_assert)

        # Model property changed
        event = ModelChangedEvent(sample, root, 'child', new_child)
        msg = proto.create("PATCH-DOC", [event])
        msg.apply_to_document(sample, mock_session)
        assert msg.buffers == []

        # RootAdded
        event2 = RootAddedEvent(sample, root)
        msg2 = proto.create("PATCH-DOC", [event2])
        msg2.apply_to_document(sample, mock_session)
        assert msg2.buffers == []

        # RootRemoved
        event3 = RootRemovedEvent(sample, root)
        msg3 = proto.create("PATCH-DOC", [event3])
        msg3.apply_to_document(sample, mock_session)
        assert msg3.buffers == []

        # ColumnsStreamed
        event4 = ColumnsStreamedEvent(sample, cds, "data", {"a": [3]}, None, mock_session)
        msg4 = proto.create("PATCH-DOC", [event4])
        msg4.apply_to_document(sample, mock_session)
        assert msg4.buffers == []

        # ColumnsPatched
        event5 = ColumnsPatchedEvent(sample, cds, "data", {"a": [(0, 11)]})
        msg5 = proto.create("PATCH-DOC", [event5])
        msg5.apply_to_document(sample, mock_session)
        assert msg5.buffers == []

        # ColumnDataChanged
        event7 = ColumnDataChangedEvent(sample, cds, "data")
        msg7 = proto.create("PATCH-DOC", [event7])
        msg7.apply_to_document(sample, mock_session)
        assert len(msg7.buffers) == 1

        # reports CDS buffer *as it is* Normally events called by setter and
        # value in local object would have been already mutated.
        [buf] = msg7.buffers
        assert bytes(buf.data) == np.array([11., 1., 2., 3]).tobytes()
예제 #8
0
    def test_patch_event_contains_setter(self) -> None:
        sample = self._sample_doc()
        root = None
        other_root = None
        for r in sample.roots:
            if r.child is not None:
                root = r
            else:
                other_root = r
        assert root is not None
        assert other_root is not None
        new_child = AnotherModelInTestPatchDoc(bar=56)

        cds = ColumnDataSource(data={'a': np.array([0., 1., 2.])})
        sample.add_root(cds)

        mock_session = object()

        def sample_document_callback_assert(event):
            """Asserts that setter is correctly set on event"""
            assert event.setter is mock_session

        sample.on_change(sample_document_callback_assert)

        # Model property changed
        event = ModelChangedEvent(sample, root, 'child', root.child, new_child,
                                  new_child)
        msg = proto.create("PATCH-DOC", [event])
        msg.apply_to_document(sample, mock_session)
        assert msg.buffers == []

        # RootAdded
        event2 = RootAddedEvent(sample, root)
        msg2 = proto.create("PATCH-DOC", [event2])
        msg2.apply_to_document(sample, mock_session)
        assert msg2.buffers == []

        # RootRemoved
        event3 = RootRemovedEvent(sample, root)
        msg3 = proto.create("PATCH-DOC", [event3])
        msg3.apply_to_document(sample, mock_session)
        assert msg3.buffers == []

        # ColumnsStreamed
        event4 = ModelChangedEvent(sample,
                                   cds,
                                   'data',
                                   10,
                                   None,
                                   None,
                                   hint=ColumnsStreamedEvent(
                                       sample, cds, {"a": [3]}, None,
                                       mock_session))
        msg4 = proto.create("PATCH-DOC", [event4])
        msg4.apply_to_document(sample, mock_session)
        assert msg4.buffers == []

        # ColumnsPatched
        event5 = ModelChangedEvent(sample,
                                   cds,
                                   'data',
                                   10,
                                   None,
                                   None,
                                   hint=ColumnsPatchedEvent(
                                       sample, cds, {"a": [(0, 11)]}))
        msg5 = proto.create("PATCH-DOC", [event5])
        msg5.apply_to_document(sample, mock_session)
        assert msg5.buffers == []

        # ColumnDataChanged, use_buffers=False
        event6 = ModelChangedEvent(sample,
                                   cds,
                                   'data', {'a': np.array([0., 1.])},
                                   None,
                                   None,
                                   hint=ColumnDataChangedEvent(sample, cds))
        msg6 = proto.create("PATCH-DOC", [event6], use_buffers=False)
        msg6.apply_to_document(sample, mock_session)
        assert msg6.buffers == []

        print(cds.data)
        # ColumnDataChanged, use_buffers=True
        event7 = ModelChangedEvent(sample,
                                   cds,
                                   'data', {'a': np.array([0., 1.])},
                                   None,
                                   None,
                                   hint=ColumnDataChangedEvent(sample, cds))
        msg7 = proto.create("PATCH-DOC", [event7])
        # can't test apply, doc not set up to *receive* binary buffers
        # msg7.apply_to_document(sample, mock_session)
        assert len(msg7.buffers) == 1
        buf = msg7.buffers.pop()
        assert len(buf) == 2
        assert isinstance(buf[0], dict)
        assert list(buf[0]) == ['id']

        # reports CDS buffer *as it is* Normally events called by setter and
        # value in local object would have been already mutated.
        assert buf[1] == np.array([11., 1., 2., 3]).tobytes()
예제 #9
0
 def test_create_model_changed(self):
     sample = self._sample_doc()
     obj = next(iter(sample.roots))
     event = ModelChangedEvent(sample, obj, 'foo', obj.foo, 42, 42)
     Protocol("1.0").create("PATCH-DOC", [event])
예제 #10
0
    def test_patch_event_contains_setter(self):
        sample = self._sample_doc()
        root = None
        other_root = None
        for r in sample.roots:
            if r.child is not None:
                root = r
            else:
                other_root = r
        assert root is not None
        assert other_root is not None
        new_child = AnotherModelInTestPatchDoc(bar=56)

        cds = ColumnDataSource(data={'a': [0, 1, 2]})
        sample.add_root(cds)

        mock_session = object()

        def sample_document_callback_assert(event):
            """Asserts that setter is correctly set on event"""
            assert event.setter is mock_session

        sample.on_change(sample_document_callback_assert)

        # Model property changed
        event = ModelChangedEvent(sample, root, 'child', root.child, new_child,
                                  new_child)
        msg = Protocol("1.0").create("PATCH-DOC", [event])
        msg.apply_to_document(sample, mock_session)

        # RootAdded
        event2 = RootAddedEvent(sample, root)
        msg2 = Protocol("1.0").create("PATCH-DOC", [event2])
        msg2.apply_to_document(sample, mock_session)

        # RootRemoved
        event3 = RootRemovedEvent(sample, root)
        msg3 = Protocol("1.0").create("PATCH-DOC", [event3])
        msg3.apply_to_document(sample, mock_session)

        # ColumnsStreamed
        event4 = ModelChangedEvent(sample,
                                   cds,
                                   'data',
                                   10,
                                   None,
                                   None,
                                   hint=ColumnsStreamedEvent(
                                       sample, cds, {"a": [3]}, None,
                                       mock_session))
        msg4 = Protocol("1.0").create("PATCH-DOC", [event4])
        msg4.apply_to_document(sample, mock_session)

        # ColumnsPatched
        event5 = ModelChangedEvent(sample,
                                   cds,
                                   'data',
                                   10,
                                   None,
                                   None,
                                   hint=ColumnsPatchedEvent(
                                       sample, cds, {"a": [(0, 11)]}))
        msg5 = Protocol("1.0").create("PATCH-DOC", [event5])
        msg5.apply_to_document(sample, mock_session)