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", ) )
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()
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)
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", }
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
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
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