예제 #1
0
    def setUp(self):
        wstates = WStates()
        self.wstates = wstates

        widget_state = WidgetStateProto()
        widget_state.id = "widget_id_1"
        widget_state.int_value = 5
        wstates.set_widget_from_proto(widget_state)
        wstates.set_widget_metadata(
            WidgetMetadata(
                id="widget_id_1",
                deserializer=lambda x, s: str(x),
                serializer=lambda x: int(x),
                value_type="int_value",
            )
        )

        wstates.set_from_value("widget_id_2", 5)
        wstates.set_widget_metadata(
            WidgetMetadata(
                id="widget_id_2",
                deserializer=lambda x, s: x,
                serializer=identity,
                value_type="int_value",
            )
        )
예제 #2
0
 def test_compact(self):
     self.session_state.compact_state()
     assert self.session_state._old_state == {
         "foo": "bar2",
         "baz": "qux2",
         "corge": "grault",
         f"{GENERATED_WIDGET_KEY_PREFIX}-foo-None": "bar",
     }
     assert self.session_state._new_session_state == {}
     assert self.session_state._new_widget_state == WStates()
예제 #3
0
 def setUp(self):
     old_state = {"foo": "bar", "baz": "qux", "corge": "grault"}
     new_session_state = {"foo": "bar2"}
     new_widget_state = WStates(
         {
             "baz": Value("qux2"),
             f"{GENERATED_WIDGET_KEY_PREFIX}-foo-None": Value("bar"),
         }, )
     self.session_state = SessionState(old_state, new_session_state,
                                       new_widget_state)
예제 #4
0
    def test_filtered_state_resilient_to_missing_metadata(self):
        old_state = {"foo": "bar", "corge": "grault"}
        new_session_state = {}
        new_widget_state = WStates(
            {f"{GENERATED_WIDGET_KEY_PREFIX}-baz": Serialized(None)}, )
        self.session_state = SessionState(old_state, new_session_state,
                                          new_widget_state)

        assert self.session_state.filtered_state == {
            "foo": "bar",
            "corge": "grault",
        }
예제 #5
0
    def test_cull_nonexistent(self):
        generated_widget_key = f"{GENERATED_WIDGET_KEY_PREFIX}-removed_widget"

        self.session_state._old_state = {
            "existing_widget": True,
            generated_widget_key: True,
            "val_set_via_state": 5,
        }

        wstates = WStates()
        self.session_state._new_widget_state = wstates

        self.session_state.cull_nonexistent({"existing_widget"})

        assert self.session_state["existing_widget"] == True
        assert generated_widget_key not in self.session_state
        assert self.session_state["val_set_via_state"] == 5
예제 #6
0
    def test_should_set_frontend_state_value_new_widget(self):
        # The widget is being registered for the first time, so there's no need
        # to have the frontend update with a new value.
        wstates = WStates()
        self.session_state._new_widget_state = wstates

        metadata = WidgetMetadata(
            id=f"{GENERATED_WIDGET_KEY_PREFIX}-0-widget_id_1",
            deserializer=lambda _, __: 0,
            serializer=identity,
            value_type="int_value",
        )
        self.session_state.set_keyed_widget(
            metadata, f"{GENERATED_WIDGET_KEY_PREFIX}-0-widget_id_1",
            "widget_id_1")
        assert (self.session_state.should_set_frontend_state_value(
            f"{GENERATED_WIDGET_KEY_PREFIX}-0-widget_id_1",
            "widget_id_1",
        ) == False)
        assert self.session_state["widget_id_1"] == 0
예제 #7
0
    def test_should_set_frontend_state_value_new_widget(self):
        # The widget is being registered for the first time, so there's no need
        # to have the frontend update with a new value.
        wstates = WStates()
        self.session_state._new_widget_state = wstates

        WIDGET_VALUE = 123

        metadata = WidgetMetadata(
            id=f"{GENERATED_WIDGET_KEY_PREFIX}-0-widget_id_1",
            deserializer=lambda _, __: WIDGET_VALUE,
            serializer=identity,
            value_type="int_value",
        )
        _, widget_value_changed = self.session_state.register_widget(
            metadata=metadata,
            user_key="widget_id_1",
        )
        assert not widget_value_changed
        assert self.session_state["widget_id_1"] == WIDGET_VALUE