def test_object_dtype(): df = pd.DataFrame({"a": my_object_vals}, index=my_object_vals) widget = QgridWidget(df=df) grid_data = json.loads(widget._df_json)["data"] widget._handle_qgrid_msg_helper({ "type": "show_filter_dropdown", "field": "a", "search_val": None }) widget._handle_qgrid_msg_helper({ "field": "a", "filter_info": { "field": "a", "selected": [0, 1], "type": "text", "excluded": [], }, "type": "change_filter", }) filter_table = widget._filter_tables["a"] assert not isinstance(filter_table[0], dict) assert not isinstance(filter_table[1], dict) assert not isinstance(grid_data[0]["a"], dict) assert not isinstance(grid_data[1]["a"], dict) assert not isinstance(grid_data[0]["index"], dict) assert not isinstance(grid_data[1]["index"], dict)
def test_add_row_button(): widget = QgridWidget(df=create_df()) event_history = init_event_history("row_added", widget=widget) widget._handle_qgrid_msg_helper({"type": "add_row"}) assert event_history == [{ "name": "row_added", "index": 4, "source": "gui" }] # make sure the added row in the internal dataframe contains the # expected values added_index = event_history[0]["index"] expected_values = pd.Series({ "qgrid_unfiltered_index": 4, "A": 1, "C": 1, "D": 3, "Date": pd.Timestamp("2013-01-02 00:00:00"), "E": "bar", "F": "fox" }) sort_idx = widget._df.loc[added_index].index assert (widget._df.loc[added_index] == expected_values[sort_idx]).all()
def test_remove_row_button(): widget = QgridWidget(df=create_df()) event_history = init_event_history(["row_removed", "selection_changed"], widget=widget) selected_rows = [1, 2] widget._handle_qgrid_msg_helper({ "rows": selected_rows, "type": "change_selection" }) widget._handle_qgrid_msg_helper({"type": "remove_row"}) assert event_history == [ { "name": "selection_changed", "old": [], "new": selected_rows, "source": "gui", }, { "name": "row_removed", "indices": selected_rows, "source": "gui" }, ]
def test_object_dtype(): df = pd.DataFrame({'a': my_object_vals}, index=my_object_vals) widget = QgridWidget(df=df) grid_data = json.loads(widget._df_json)['data'] widget._handle_qgrid_msg_helper({ 'type': 'show_filter_dropdown', 'field': 'a', 'search_val': None }) widget._handle_qgrid_msg_helper({ 'field': "a", 'filter_info': { 'field': "a", 'selected': [0, 1], 'type': "text", 'excluded': [] }, 'type': "change_filter" }) filter_table = widget._filter_tables['a'] assert not isinstance(filter_table[0], dict) assert not isinstance(filter_table[1], dict) assert not isinstance(grid_data[0]['a'], dict) assert not isinstance(grid_data[1]['a'], dict) assert not isinstance(grid_data[0]['index'], dict) assert not isinstance(grid_data[1]['index'], dict)
def test_object_dtype(): df = pd.DataFrame({'a': my_object_vals}) widget = QgridWidget(df=df) grid_data = json.loads(widget._df_json)['data'] widget._handle_qgrid_msg_helper({ 'type': 'get_column_min_max', 'field': 'a', 'search_val': None }) widget._handle_qgrid_msg_helper({ 'field': "a", 'filter_info': { 'field': "a", 'selected': [0, 1], 'type': "text", 'excluded': [] }, 'type': "filter_changed" }) filter_table = widget._filter_tables['a'] assert not isinstance(filter_table[0], dict) assert not isinstance(filter_table[1], dict) assert not isinstance(grid_data[0]['a'], dict) assert not isinstance(grid_data[1]['a'], dict)
def test_remove_row_button(): widget = QgridWidget(df=create_df()) event_history = init_event_history(['row_removed', 'selection_changed'], widget=widget) selected_rows = [1, 2] widget._handle_qgrid_msg_helper({ 'rows': selected_rows, 'type': "change_selection" }) widget._handle_qgrid_msg_helper({ 'type': 'remove_row' }) assert event_history == [ { 'name': 'selection_changed', 'old': [], 'new': selected_rows, 'source': 'gui' }, { 'name': 'row_removed', 'indices': selected_rows, 'source': 'gui' } ]
def test_edit_date(): view = QgridWidget(df=create_df()) view._handle_qgrid_msg_helper({ 'column': "Date", 'row_index': 3, 'type': "cell_change", 'unfiltered_index': 0, 'value': "2013-01-16T00:00:00.000+00:00" })
def test_nans(): df = pd.DataFrame([(pd.Timestamp('2017-02-02'), np.nan), (4, 2), ('foo', 'bar')]) view = QgridWidget(df=df) view._handle_qgrid_msg_helper({ 'type': 'change_sort', 'sort_field': 1, 'sort_ascending': True })
def test_get_selected_df(): sample_df = create_df() selected_rows = [1, 3] view = QgridWidget(df=sample_df) view._handle_qgrid_msg_helper({ 'rows': selected_rows, 'type': "selection_change" }) selected_df = view.get_selected_df() assert len(selected_df) == 2 assert sample_df.iloc[selected_rows].equals(selected_df)
def test_get_selected_df(): sample_df = create_df() selected_rows = [1, 3] view = QgridWidget(df=sample_df) view._handle_qgrid_msg_helper({ 'rows': selected_rows, 'type': "change_selection" }) selected_df = view.get_selected_df() assert len(selected_df) == 2 assert sample_df.iloc[selected_rows].equals(selected_df)
def test_multi_index(): view = QgridWidget(df=create_multi_index_df()) observer_count = 0 def on_value_change(change): nonlocal observer_count observer_count += 1 view.observe(on_value_change, names=['_df']) view._handle_qgrid_msg_helper({ 'type': 'get_column_min_max', 'field': 'level_0', 'search_val': None }) view._handle_qgrid_msg_helper({ 'type': 'filter_changed', 'field': 3, 'filter_info': { 'field': 3, 'type': 'slider', 'min': -0.111, 'max': None } }) view._handle_qgrid_msg_helper({ 'type': 'filter_changed', 'field': 3, 'filter_info': { 'field': 3, 'type': 'slider', 'min': None, 'max': None } }) view._handle_qgrid_msg_helper({ 'type': 'sort_changed', 'sort_field': 3, 'sort_ascending': True }) view._handle_qgrid_msg_helper({ 'type': 'sort_changed', 'sort_field': 'level_0', 'sort_ascending': True }) assert observer_count == 4
def test_nans(): df = pd.DataFrame([(pd.Timestamp('2017-02-02'), np.nan), (4, 2), ('foo', 'bar')]) view = QgridWidget(df=df) view._handle_qgrid_msg_helper({ 'type': 'sort_changed', 'sort_field': 1, 'sort_ascending': True }) view._handle_qgrid_msg_helper({ 'type': 'get_column_min_max', 'field': 1, 'search_val': None })
def test_multi_index(): view = QgridWidget(df=create_multi_index_df()) view._handle_qgrid_msg_helper({ 'type': 'get_column_min_max', 'field': 'level_0', 'search_val': None }) view._handle_qgrid_msg_helper({ 'type': 'filter_changed', 'field': 3, 'filter_info': { 'field': 3, 'type': 'slider', 'min': -0.111, 'max': None } }) view._handle_qgrid_msg_helper({ 'type': 'sort_changed', 'sort_field': 3, 'sort_ascending': True }) view._handle_qgrid_msg_helper({ 'type': 'sort_changed', 'sort_field': 'level_0', 'sort_ascending': True })
def test_mixed_type_column(): df = pd.DataFrame({"A": [1.2, "xy", 4], "B": [3, 4, 5]}) df = df.set_index(pd.Index(["yz", 7, 3.2])) view = QgridWidget(df=df) view._handle_qgrid_msg_helper({ "type": "change_sort", "sort_field": "A", "sort_ascending": True }) view._handle_qgrid_msg_helper({ "type": "show_filter_dropdown", "field": "A", "search_val": None })
def test_date_index(): df = create_df() df.set_index("Date", inplace=True) view = QgridWidget(df=df) view._handle_qgrid_msg_helper({ "type": "change_filter", "field": "A", "filter_info": { "field": "A", "type": "slider", "min": 2, "max": 3, }, })
def test_series_of_text_filters(): view = QgridWidget(df=create_df()) view._handle_qgrid_msg_helper({ "type": "show_filter_dropdown", "field": "E", "search_val": None }) view._handle_qgrid_msg_helper({ "field": "E", "filter_info": { "field": "E", "selected": [0, 1], "type": "text", "excluded": [], }, "type": "change_filter", }) filtered_df = view.get_changed_df() assert len(filtered_df) == 2 # reset the filter... view._handle_qgrid_msg_helper({ "field": "E", "filter_info": { "field": "E", "selected": None, "type": "text", "excluded": [], }, "type": "change_filter", }) # ...and apply a text filter on a different column view._handle_qgrid_msg_helper({ "type": "show_filter_dropdown", "field": "F", "search_val": None }) view._handle_qgrid_msg_helper({ "field": "F", "filter_info": { "field": "F", "selected": [0, 1], "type": "text", "excluded": [], }, "type": "change_filter", }) filtered_df = view.get_changed_df() assert len(filtered_df) == 2
def test_integer_index_filter(): view = QgridWidget(df=create_df()) view._handle_qgrid_msg_helper({ "field": "index", "filter_info": { "field": "index", "max": None, "min": 2, "type": "slider", }, "type": "change_filter", }) filtered_df = view.get_changed_df() assert len(filtered_df) == 2
def test_nans(): df = pd.DataFrame([(pd.Timestamp("2017-02-02"), np.nan), (4, 2), ("foo", "bar")]) view = QgridWidget(df=df) view._handle_qgrid_msg_helper({ "type": "change_sort", "sort_field": 1, "sort_ascending": True }) view._handle_qgrid_msg_helper({ "type": "show_filter_dropdown", "field": 1, "search_val": None })
def test_add_row(): view = QgridWidget(df=create_df()) observer_called = {} def on_value_change(change): observer_called['called'] = True assert len(change['new']) == 5 view.observe(on_value_change, names=['_df']) view._handle_qgrid_msg_helper({'type': 'add_row'}) assert observer_called['called']
def test_integer_index_filter(): view = QgridWidget(df=create_df()) view._handle_qgrid_msg_helper({ 'field': "index", 'filter_info': { 'field': "index", 'max': None, 'min': 2, 'type': "slider" }, 'type': "change_filter" }) filtered_df = view.get_changed_df() assert len(filtered_df) == 2
def test_integer_index_filter(): view = QgridWidget(df=create_df()) view._handle_qgrid_msg_helper({ 'field': "index", 'filter_info': { 'field': "index", 'max': None, 'min': 2, 'type': "slider" }, 'type': "filter_changed" }) filtered_df = view.get_changed_df() assert len(filtered_df) == 2
def test_date_index(): df = create_df() df.set_index('Date', inplace=True) view = QgridWidget(df=df) view._handle_qgrid_msg_helper({ 'type': 'change_filter', 'field': 'A', 'filter_info': { 'field': 'A', 'type': 'slider', 'min': 2, 'max': 3 } })
def test_series_of_text_filters(): view = QgridWidget(df=create_df()) view._handle_qgrid_msg_helper({ 'type': 'get_column_min_max', 'field': 'E', 'search_val': None }) view._handle_qgrid_msg_helper({ 'field': "E", 'filter_info': { 'field': "E", 'selected': [0, 1], 'type': "text", 'excluded': [] }, 'type': "filter_changed" }) filtered_df = view.get_changed_df() assert len(filtered_df) == 2 # reset the filter... view._handle_qgrid_msg_helper({ 'field': "E", 'filter_info': { 'field': "E", 'selected': None, 'type': "text", 'excluded': [] }, 'type': "filter_changed" }) # ...and apply a text filter on a different column view._handle_qgrid_msg_helper({ 'type': 'get_column_min_max', 'field': 'F', 'search_val': None }) view._handle_qgrid_msg_helper({ 'field': "F", 'filter_info': { 'field': "F", 'selected': [0, 1], 'type': "text", 'excluded': [] }, 'type': "filter_changed" }) filtered_df = view.get_changed_df() assert len(filtered_df) == 2
def test_mixed_type_column(): df = pd.DataFrame({'A': [1.2, 'xy', 4], 'B': [3, 4, 5]}) df = df.set_index(pd.Index(['yz', 7, 3.2])) view = QgridWidget(df=df) view._handle_qgrid_msg_helper({ 'type': 'sort_changed', 'sort_field': 'A', 'sort_ascending': True }) view._handle_qgrid_msg_helper({ 'type': 'get_column_min_max', 'field': 'A', 'search_val': None })
def test_mixed_type_column(): df = pd.DataFrame({'A': [1.2, 'xy', 4], 'B': [3, 4, 5]}) df = df.set_index(pd.Index(['yz', 7, 3.2])) view = QgridWidget(df=df) view._handle_qgrid_msg_helper({ 'type': 'change_sort', 'sort_field': 'A', 'sort_ascending': True }) view._handle_qgrid_msg_helper({ 'type': 'show_filter_dropdown', 'field': 'A', 'search_val': None })
def test_series_of_text_filters(): view = QgridWidget(df=create_df()) view._handle_qgrid_msg_helper({ 'type': 'show_filter_dropdown', 'field': 'E', 'search_val': None }) view._handle_qgrid_msg_helper({ 'field': "E", 'filter_info': { 'field': "E", 'selected': [0, 1], 'type': "text", 'excluded': [] }, 'type': "change_filter" }) filtered_df = view.get_changed_df() assert len(filtered_df) == 2 # reset the filter... view._handle_qgrid_msg_helper({ 'field': "E", 'filter_info': { 'field': "E", 'selected': None, 'type': "text", 'excluded': [] }, 'type': "change_filter" }) # ...and apply a text filter on a different column view._handle_qgrid_msg_helper({ 'type': 'show_filter_dropdown', 'field': 'F', 'search_val': None }) view._handle_qgrid_msg_helper({ 'field': "F", 'filter_info': { 'field': "F", 'selected': [0, 1], 'type': "text", 'excluded': [] }, 'type': "change_filter" }) filtered_df = view.get_changed_df() assert len(filtered_df) == 2
def test_date_index(): df = create_df() df.set_index('Date', inplace=True) view = QgridWidget(df=df) view._handle_qgrid_msg_helper({ 'type': 'filter_changed', 'field': 'A', 'filter_info': { 'field': 'A', 'type': 'slider', 'min': 2, 'max': 3 } })
def test_nans(): df = pd.DataFrame([(pd.Timestamp('2017-02-02'), np.nan), (4, 2), ('foo', 'bar')]) view = QgridWidget(df=df) view._handle_qgrid_msg_helper({ 'type': 'change_sort', 'sort_field': 1, 'sort_ascending': True }) view._handle_qgrid_msg_helper({ 'type': 'show_filter_dropdown', 'field': 1, 'search_val': None })
def test_change_selection(): widget = QgridWidget(df=create_large_df(size=10)) event_history = init_event_history('selection_changed', widget=widget) widget._handle_qgrid_msg_helper({ 'type': 'change_selection', 'rows': [5] }) assert widget._selected_rows == [5] widget._handle_qgrid_msg_helper({ 'type': 'change_selection', 'rows': [7, 8] }) assert widget._selected_rows == [7, 8] widget.change_selection([3, 5, 6]) assert widget._selected_rows == [3, 5, 6] widget.change_selection() assert widget._selected_rows == [] assert event_history == [ { 'name': 'selection_changed', 'old': [], 'new': [5], 'source': 'gui' }, { 'name': 'selection_changed', 'old': [5], 'new': [7, 8], 'source': 'gui' }, { 'name': 'selection_changed', 'old': [7, 8], 'new': [3, 5, 6], 'source': 'api' }, { 'name': 'selection_changed', 'old': [3, 5, 6], 'new': [], 'source': 'api' }, ]
def test_add_row(): widget = QgridWidget(df=create_df()) event_history = init_event_history('row_added', widget=widget) widget._handle_qgrid_msg_helper({'type': 'add_row'}) assert event_history == [{'name': 'row_added', 'index': 4}] # make sure the added row in the internal dataframe contains the # expected values added_index = event_history[0]['index'] expected_values = np.array( [4, 1.0, pd.Timestamp('2013-01-02 00:00:00'), 1.0, 3, 'bar', 'fox'], dtype=object) assert (widget._df.loc[added_index].values == expected_values).all()
def test_row_edit_callback(): sample_df = create_df() def can_edit_row(row): return row["E"] == "train" and row["F"] == "bar" view = QgridWidget(df=sample_df, row_edit_callback=can_edit_row) view._handle_qgrid_msg_helper({ "type": "change_sort", "sort_field": "index", "sort_ascending": True }) expected_dict = {0: False, 1: True, 2: False, 3: False} assert expected_dict == view._editable_rows
def test_row_edit_callback(): sample_df = create_df() def can_edit_row(row): return row['E'] == 'train' and row['F'] == 'bar' view = QgridWidget(df=sample_df, row_edit_callback=can_edit_row) view._handle_qgrid_msg_helper({ 'type': 'change_sort', 'sort_field': 'index', 'sort_ascending': True }) expected_dict = {0: False, 1: True, 2: False, 3: False} assert expected_dict == view._editable_rows
def test_change_selection(): widget = QgridWidget(df=create_large_df(size=10)) event_history = init_event_history('selection_changed', widget=widget) widget._handle_qgrid_msg_helper({'type': 'change_selection', 'rows': [5]}) assert widget._selected_rows == [5] widget._handle_qgrid_msg_helper({ 'type': 'change_selection', 'rows': [7, 8] }) assert widget._selected_rows == [7, 8] widget.change_selection([3, 5, 6]) assert widget._selected_rows == [3, 5, 6] widget.change_selection() assert widget._selected_rows == [] assert event_history == [ { 'name': 'selection_changed', 'old': [], 'new': [5], 'source': 'gui' }, { 'name': 'selection_changed', 'old': [5], 'new': [7, 8], 'source': 'gui' }, { 'name': 'selection_changed', 'old': [7, 8], 'new': [3, 5, 6], 'source': 'api' }, { 'name': 'selection_changed', 'old': [3, 5, 6], 'new': [], 'source': 'api' }, ]
def test_change_selection(): widget = QgridWidget(df=create_large_df(size=10)) event_history = init_event_history("selection_changed", widget=widget) widget._handle_qgrid_msg_helper({"type": "change_selection", "rows": [5]}) assert widget._selected_rows == [5] widget._handle_qgrid_msg_helper({ "type": "change_selection", "rows": [7, 8] }) assert widget._selected_rows == [7, 8] widget.change_selection([3, 5, 6]) assert widget._selected_rows == [3, 5, 6] widget.change_selection() assert widget._selected_rows == [] assert event_history == [ { "name": "selection_changed", "old": [], "new": [5], "source": "gui" }, { "name": "selection_changed", "old": [5], "new": [7, 8], "source": "gui", }, { "name": "selection_changed", "old": [7, 8], "new": [3, 5, 6], "source": "api", }, { "name": "selection_changed", "old": [3, 5, 6], "new": [], "source": "api", }, ]
def test_viewport_changed(): widget = QgridWidget(df=create_large_df()) event_history = init_event_history(All) widget._handle_qgrid_msg_helper({ 'type': 'viewport_changed', 'top': 7124, 'bottom': 7136 }) assert event_history == [{ 'name': 'json_updated', 'triggered_by': 'viewport_changed', 'range': (7024, 7224) }, { 'name': 'viewport_changed', 'old': (0, 100), 'new': (7124, 7136) }]
def test_edit_date(): view = QgridWidget(df=create_df()) observer_called = False def on_value_change(change): nonlocal observer_called observer_called = True assert change['new']['Date'][3] == pd.Timestamp('2013-01-16 00:00:00') view.observe(on_value_change, names=['_df']) view._handle_qgrid_msg_helper({ 'column': "Date", 'row_index': 3, 'type': "cell_change", 'unfiltered_index': 0, 'value': "2013-01-16T00:00:00.000+00:00" }) assert observer_called
def test_remove_row(): widget = QgridWidget(df=create_df()) event_history = init_event_history(['row_removed', 'selection_changed'], widget=widget) selected_rows = [1, 2] widget._handle_qgrid_msg_helper({ 'rows': selected_rows, 'type': "selection_changed" }) widget._handle_qgrid_msg_helper({'type': 'remove_row'}) assert event_history == [{ 'name': 'selection_changed', 'old': [], 'new': selected_rows }, { 'name': 'row_removed', 'indices': selected_rows }]
def test_row_edit_callback(): sample_df = create_df() def can_edit_row(row): return row['E'] == 'train' and row['F'] == 'bar' view = QgridWidget(df=sample_df, row_edit_callback=can_edit_row) view._handle_qgrid_msg_helper({ 'type': 'change_sort', 'sort_field': 'index', 'sort_ascending': True }) expected_dict = { 0: False, 1: True, 2: False, 3: False } assert expected_dict == view._editable_rows
def test_change_viewport(): widget = QgridWidget(df=create_large_df()) event_history = init_event_history(All) widget._handle_qgrid_msg_helper({ 'type': 'change_viewport', 'top': 7124, 'bottom': 7136 }) assert event_history == [ { 'name': 'json_updated', 'triggered_by': 'change_viewport', 'range': (7024, 7224) }, { 'name': 'viewport_changed', 'old': (0, 100), 'new': (7124, 7136) } ]
def test_change_viewport(): widget = QgridWidget(df=create_large_df()) event_history = init_event_history(All) widget._handle_qgrid_msg_helper({ "type": "change_viewport", "top": 7124, "bottom": 7136 }) assert event_history == [ { "name": "json_updated", "triggered_by": "change_viewport", "range": (7024, 7224), }, { "name": "viewport_changed", "old": (0, 100), "new": (7124, 7136) }, ]
def test_add_row_button(): widget = QgridWidget(df=create_df()) event_history = init_event_history('row_added', widget=widget) widget._handle_qgrid_msg_helper({ 'type': 'add_row' }) assert event_history == [{ 'name': 'row_added', 'index': 4, 'source': 'gui' }] # make sure the added row in the internal dataframe contains the # expected values added_index = event_history[0]['index'] expected_values = np.array( [4, 1.0, pd.Timestamp('2013-01-02 00:00:00'), 1.0, 3, 'bar', 'fox'], dtype=object ) assert (widget._df.loc[added_index].values == expected_values).all()
def test_selection_changed(): widget = QgridWidget(df=create_df()) event_history = init_event_history('selection_changed', widget=widget) widget._handle_qgrid_msg_helper({'type': 'selection_changed', 'rows': [5]}) widget._handle_qgrid_msg_helper({ 'type': 'selection_changed', 'rows': [7, 8] }) assert event_history == [ { 'name': 'selection_changed', 'old': [], 'new': [5] }, { 'name': 'selection_changed', 'old': [5], 'new': [7, 8] }, ]
def test_period_object_column(): range_index = pd.period_range(start='2000', periods=10, freq='B') df = pd.DataFrame({'a': 5, 'b': range_index}, index=range_index) view = QgridWidget(df=df) view._handle_qgrid_msg_helper({ 'type': 'change_sort', 'sort_field': 'index', 'sort_ascending': True }) view._handle_qgrid_msg_helper({ 'type': 'show_filter_dropdown', 'field': 'index', 'search_val': None }) view._handle_qgrid_msg_helper({ 'type': 'change_sort', 'sort_field': 'b', 'sort_ascending': True }) view._handle_qgrid_msg_helper({ 'type': 'show_filter_dropdown', 'field': 'b', 'search_val': None })
def test_change_filter_viewport(): widget = QgridWidget(df=create_large_df()) event_history = init_event_history(All) widget._handle_qgrid_msg_helper({ 'type': 'show_filter_dropdown', 'field': 'B (as str)', 'search_val': None }) widget._handle_qgrid_msg_helper({ 'type': 'change_filter_viewport', 'field': 'B (as str)', 'top': 556, 'bottom': 568 }) widget._handle_qgrid_msg_helper({ 'type': 'change_filter_viewport', 'field': 'B (as str)', 'top': 302, 'bottom': 314 }) assert event_history == [ { 'name': 'filter_dropdown_shown', 'column': 'B (as str)' }, { 'name': 'text_filter_viewport_changed', 'column': 'B (as str)', 'old': (0, 200), 'new': (556, 568) }, { 'name': 'text_filter_viewport_changed', 'column': 'B (as str)', 'old': (556, 568), 'new': (302, 314) } ]
def test_multi_index(): widget = QgridWidget(df=create_multi_index_df()) event_history = init_event_history(['filter_dropdown_shown', 'filter_changed', 'sort_changed'], widget=widget) widget._handle_qgrid_msg_helper({ 'type': 'show_filter_dropdown', 'field': 'level_0', 'search_val': None }) widget._handle_qgrid_msg_helper({ 'type': 'show_filter_dropdown', 'field': 3, 'search_val': None }) widget._handle_qgrid_msg_helper({ 'type': 'change_filter', 'field': 3, 'filter_info': { 'field': 3, 'type': 'slider', 'min': -0.111, 'max': None } }) widget._handle_qgrid_msg_helper({ 'type': 'change_filter', 'field': 3, 'filter_info': { 'field': 3, 'type': 'slider', 'min': None, 'max': None } }) widget._handle_qgrid_msg_helper({ 'type': 'change_filter', 'field': 'level_1', 'filter_info': { 'field': 'level_1', 'type': 'text', 'selected': [0], 'excluded': [] } }) widget._handle_qgrid_msg_helper({ 'type': 'change_sort', 'sort_field': 3, 'sort_ascending': True }) widget._handle_qgrid_msg_helper({ 'type': 'change_sort', 'sort_field': 'level_0', 'sort_ascending': True }) assert event_history == [ { 'name': 'filter_dropdown_shown', 'column': 'level_0' }, { 'name': 'filter_dropdown_shown', 'column': 3 }, { 'name': 'filter_changed', 'column': 3 }, { 'name': 'filter_changed', 'column': 3 }, { 'name': 'filter_changed', 'column': 'level_1' }, { 'name': 'sort_changed', 'old': { 'column': None, 'ascending': True }, 'new': { 'column': 3, 'ascending': True } }, { 'name': 'sort_changed', 'old': { 'column': 3, 'ascending': True }, 'new': { 'column': 'level_0', 'ascending': True } } ]