Esempio n. 1
0
 def test_nans(self):
     df = pd.DataFrame([(pd.Timestamp('2017-02-02'), np.nan),
                        (4, 2),
                        ('foo', 'bar')])
     view = QgridWidget(df=df)
     
     self.assertIsNotNone(view.get_changed_df())
Esempio n. 2
0
def test_edit_cell():
    df = pd.DataFrame({'foo': ['hello'], 'bar': ['world'], 'baz': [42], 'boo': [57]})
    df.set_index('baz', inplace=True, drop=True)

    q = QgridWidget(df=df)
    event_history = init_event_history(All)

    q.edit_cell(42, 'foo', 'hola')

    assert q._df.loc[42, 'foo'] == 'hola'

    assert event_history == [
        {
            'name': 'json_updated',
            'range': (0, 100),
            'triggered_by': 'edit_cell'
        },
        {
            'name': 'cell_edited',
            'index': 42,
            'column': 'foo',
            'old': 'hello',
            'new': 'hola',
            'source': 'api'
        }
    ]
Esempio n. 3
0
def test_remove_row():
    event_history = init_event_history(All)
    df = create_df()

    widget = QgridWidget(df=df)
    widget.remove_row(rows=[2])

    assert 2 not in widget._df.index
    assert len(widget._df) == 3

    assert event_history == [
        {
            "name": "instance_created"
        },
        {
            "name": "json_updated",
            "range": (0, 100),
            "triggered_by": "remove_row",
        },
        {
            "name": "row_removed",
            "indices": [2],
            "source": "api"
        },
    ]
Esempio n. 4
0
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()
Esempio n. 5
0
def test_edit_cell():
    df = pd.DataFrame({
        "foo": ["hello"],
        "bar": ["world"],
        "baz": [42],
        "boo": [57]
    })
    df.set_index("baz", inplace=True, drop=True)

    q = QgridWidget(df=df)
    event_history = init_event_history(All)

    q.edit_cell(42, "foo", "hola")

    assert q._df.loc[42, "foo"] == "hola"

    assert event_history == [
        {
            "name": "json_updated",
            "range": (0, 100),
            "triggered_by": "edit_cell",
        },
        {
            "name": "cell_edited",
            "index": 42,
            "column": "foo",
            "old": "hello",
            "new": "hola",
            "source": "api",
        },
    ]
Esempio n. 6
0
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
    })
Esempio n. 7
0
def test_add_row():
    event_history = init_event_history(All)
    df = pd.DataFrame({
        'foo': ['hello'],
        'bar': ['world'],
        'baz': [42],
        'boo': [57]
    })
    df.set_index('baz', inplace=True, drop=True)

    q = QgridWidget(df=df)

    new_row = [('baz', 43), ('bar', "new bar"), ('boo', 58),
               ('foo', "new foo")]

    q.add_row(new_row)

    assert q._df.loc[43, 'foo'] == 'new foo'
    assert q._df.loc[42, 'foo'] == 'hello'

    assert event_history == [{
        'name': 'instance_created'
    }, {
        'name': 'json_updated',
        'range': (0, 100),
        'triggered_by': 'add_row'
    }, {
        'name': 'row_added',
        'index': 43,
        'source': 'api'
    }]
Esempio n. 8
0
def test_edit_cell():
    df = pd.DataFrame({
        'foo': ['hello'],
        'bar': ['world'],
        'baz': [42],
        'boo': [57]
    })
    df.set_index('baz', inplace=True, drop=True)

    q = QgridWidget(df=df)
    event_history = init_event_history(All)

    q.edit_cell(42, 'foo', 'hola')

    assert q._df.loc[42, 'foo'] == 'hola'

    assert event_history == [{
        'name': 'json_updated',
        'range': (0, 100),
        'triggered_by': 'edit_cell'
    }, {
        'name': 'cell_edited',
        'index': 42,
        'column': 'foo',
        'old': 'hello',
        'new': 'hola',
        'source': 'api'
    }]
Esempio n. 9
0
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)
Esempio n. 10
0
def test_set_defaults():
    fake_grid_options_a = {'foo': 'bar'}
    set_defaults(show_toolbar=False,
                 precision=4,
                 grid_options=fake_grid_options_a)

    def assert_widget_vals_a(widget):
        assert not widget.show_toolbar
        assert widget.precision == 4
        assert widget.grid_options == fake_grid_options_a

    df = create_df()
    view = show_grid(df)
    assert_widget_vals_a(view)

    view = QgridWidget(df=df)
    assert_widget_vals_a(view)

    fake_grid_options_b = {'foo': 'buzz'}
    set_defaults(show_toolbar=True,
                 precision=2,
                 grid_options=fake_grid_options_b)

    def assert_widget_vals_b(widget):
        assert widget.show_toolbar
        assert widget.precision == 2
        assert widget.grid_options == fake_grid_options_b

    df = create_df()
    view = show_grid(df)
    assert_widget_vals_b(view)

    view = QgridWidget(df=df)
    assert_widget_vals_b(view)
Esempio n. 11
0
def test_add_row():
    event_history = init_event_history(All)
    df = pd.DataFrame({'foo': ['hello'], 'bar': ['world'], 'baz': [42], 'boo': [57]})
    df.set_index('baz', inplace=True, drop=True)

    q = QgridWidget(df=df)

    new_row = [
        ('baz', 43),
        ('bar', "new bar"),
        ('boo', 58),
        ('foo', "new foo")
    ]

    q.add_row(new_row)

    assert q._df.loc[43, 'foo'] == 'new foo'
    assert q._df.loc[42, 'foo'] == 'hello'

    assert event_history == [
        {'name': 'instance_created'},
        {
            'name': 'json_updated',
            'range': (0, 100),
            'triggered_by': 'add_row'
        },
        {
            'name': 'row_added',
            'index': 43,
            'source': 'api'
        }
    ]
Esempio n. 12
0
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'
        }
    ]
Esempio n. 13
0
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"
    })
Esempio n. 14
0
 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
     })
Esempio n. 15
0
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)
Esempio n. 16
0
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)
Esempio n. 17
0
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,
        },
    })
Esempio n. 18
0
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
        }
    })
Esempio n. 19
0
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
    })
Esempio n. 20
0
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
Esempio n. 21
0
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
Esempio n. 22
0
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
Esempio n. 23
0
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
        }
    })
Esempio n. 24
0
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
    })
Esempio n. 25
0
def test_edit_number():
    old_val = 3
    view = QgridWidget(df=create_df())

    for idx in range(-10, 10, 1):
        check_edit_success(view, 'D', 2, old_val, idx, idx)
        old_val = idx
Esempio n. 26
0
class DJGrid:
    '''
    DataJoint/QgridWidget utility class.
    Deprecated in favor of DJRecord since we clone table state &
    dj isn't designed for data updates; possibly useful if dealing with pandas
    or updates absolutely required.
    '''
    def __init__(self, schema, tableclass):
        self._djpanda = DJPanda(schema, tableclass)
        self._widget = None

    def display(self):
        df = self._djpanda.fetch()
        self._widget = QgridWidget(df=df, show_toolbar=True)
        return self._widget

    def save(self):
        self._djpanda._edit = self._widget.get_changed_df()
        return self._djpanda.save()

    def edit(self):
        # todo: get full-loop interaction going in jupyter
        #   ... using 'interact()' requires a widget with 'FIXME WHAT NEEDS'
        # basically ixgrid is a dom widget which doesn't have whatever
        # this missing note used to say.
        raise NotImplementedError(
            'edit() not implemented. Please use .display() then .save()')
Esempio n. 27
0
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()
Esempio n. 28
0
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
Esempio n. 29
0
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
Esempio n. 30
0
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'
        },
    ]
Esempio n. 31
0
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",
        },
    ]
Esempio n. 32
0
def test_edit_multi_index_df():
    df_multi = create_multi_index_df()
    view = QgridWidget(df=df_multi)
    old_val = df_multi.loc[('bar', 'two'), 1]

    check_edit_success(view, 1, 1, old_val,
                       round(old_val,
                             pd.get_option('display.precision') - 1), 3.45678,
                       3.45678)
Esempio n. 33
0
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)
    }]
Esempio n. 34
0
def test_edit_multi_index_df():
    df_multi = create_multi_index_df()
    df_multi.index.set_names('first', level=0, inplace=True)
    view = QgridWidget(df=df_multi)
    old_val = df_multi.loc[('bar', 'two'), 1]

    check_edit_success(view, 1, 1, old_val,
                       round(old_val,
                             pd.get_option('display.precision') - 1), 3.45678,
                       3.45678)
Esempio n. 35
0
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'
        },
    ]
Esempio n. 36
0
def test_edit_date():
    view = QgridWidget(df=create_df())
    check_edit_success(
        view,
        "Date",
        3,
        pd.Timestamp("2013-01-02 00:00:00"),
        "2013-01-02T00:00:00.000Z",
        pd.Timestamp("2013-01-16 00:00:00"),
        "2013-01-16T00:00:00.000Z",
    )
Esempio n. 37
0
def test_remove_row():
    event_history = init_event_history(All)
    df = create_df()

    widget = QgridWidget(df=df)
    widget.remove_row(rows=[2])

    assert 2 not in widget._df.index
    assert len(widget._df) == 3

    assert event_history == [{
        'name': 'instance_created'
    }, {
        'name': 'json_updated',
        'range': (0, 100),
        'triggered_by': 'remove_row'
    }, {
        'name': 'row_removed',
        'indices': [2],
        'source': 'api'
    }]
Esempio n. 38
0
def test_index_categorical():
    df = pd.DataFrame({
        "foo": np.random.randn(3),
        "future_index": [22, 13, 87]
    })
    df["future_index"] = df["future_index"].astype("category")
    df = df.set_index("future_index")
    widget = QgridWidget(df=df)
    grid_data = json.loads(widget._df_json)["data"]

    assert not isinstance(grid_data[0]["future_index"], dict)
    assert not isinstance(grid_data[1]["future_index"], dict)
Esempio n. 39
0
def test_index_categorical():
    df = pd.DataFrame({
        'foo': np.random.randn(3),
        'future_index': [22, 13, 87]
    })
    df['future_index'] = df['future_index'].astype('category')
    df = df.set_index('future_index')
    widget = QgridWidget(df=df)
    grid_data = json.loads(widget._df_json)['data']

    assert not isinstance(grid_data[0]['future_index'], dict)
    assert not isinstance(grid_data[1]['future_index'], dict)
Esempio n. 40
0
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)
Esempio n. 41
0
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
Esempio n. 42
0
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()
Esempio n. 43
0
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)
        }
    ]
Esempio n. 44
0
def test_remove_row():
    event_history = init_event_history(All)
    df = create_df()

    widget = QgridWidget(df=df)
    widget.remove_row(rows=[2])

    assert 2 not in widget._df.index
    assert len(widget._df) == 3

    assert event_history == [
        {'name': 'instance_created'},
        {
            'name': 'json_updated',
            'range': (0, 100),
            'triggered_by': 'remove_row'
        },
        {
            'name': 'row_removed',
            'indices': [2],
            'source': 'api'
        }
    ]
Esempio n. 45
0
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
    })
Esempio n. 46
0
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)
        }
    ]
Esempio n. 47
0
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
                }
        }
    ]
Esempio n. 48
0
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