Beispiel #1
0
def test_HTMLJinjaTableBlock_insert_additional_html_concat():
    dummy_html1 = '<style></style>'
    formatter1 = abtf.TableFormatter()
    formatter1.insert_additional_html = MagicMock(return_value=dummy_html1)
    dummy_html2 = '<div></div>'
    formatter2 = abtf.TableFormatter()
    formatter2.insert_additional_html = MagicMock(return_value=dummy_html2)
    table = abt.HTMLJinjaTableBlock(df, formatters=[formatter1, formatter2], use_default_formatters=False)
    res = table.insert_additional_html()
    assert res == dummy_html1 + dummy_html2
Beispiel #2
0
def test_TableFormatter__is_selected_cell():
    # Expected behaviour:
    # 1) rows, columns is None, apply_to_header_and_index is True (default) => Work on all cells
    # 2) rows, columns is None, apply_to_header_and_index is False => Work on data cells
    # 3) rows, columns is not None, apply_to_header_and_index is False => Work on selected cells, including header,index
    # 4) rows, columns is not None, apply_to_header_and_index is True => Work on selected cells; header,index always

    # Check case 1)
    tf = pbtf.TableFormatter(rows=None, columns=None)
    assert tf._is_selected_cell('a', 'aa') == True
    assert tf._is_selected_cell('a', pbtf.INDEX_COL_NAME) == True
    assert tf._is_selected_cell(pbtf.HEADER_ROW_NAME, 'aa') == True
    assert tf._is_selected_cell(pbtf.HEADER_ROW_NAME,
                                pbtf.INDEX_COL_NAME) == True

    # Check case 2)
    tf = pbtf.TableFormatter(rows=None,
                             columns=None,
                             apply_to_header_and_index=False)
    assert tf._is_selected_cell('a', 'aa') == True
    assert tf._is_selected_cell('a', pbtf.INDEX_COL_NAME) == False
    assert tf._is_selected_cell(pbtf.HEADER_ROW_NAME, 'aa') == False
    assert tf._is_selected_cell(pbtf.HEADER_ROW_NAME,
                                pbtf.INDEX_COL_NAME) == False

    # Check case3)
    row_names = ['a', pbtf.HEADER_ROW_NAME]
    column_names = ['aa', pbtf.INDEX_COL_NAME]
    tf = pbtf.TableFormatter(rows=row_names,
                             columns=column_names,
                             apply_to_header_and_index=False)
    assert tf._is_selected_cell('a', 'aa') == True
    assert tf._is_selected_cell('a', 'bb') == False
    assert tf._is_selected_cell('b', 'aa') == False
    assert tf._is_selected_cell('a', pbtf.INDEX_COL_NAME) == True
    assert tf._is_selected_cell('b', pbtf.INDEX_COL_NAME) == False
    assert tf._is_selected_cell(pbtf.HEADER_ROW_NAME, 'aa') == True
    assert tf._is_selected_cell(pbtf.HEADER_ROW_NAME, 'bb') == False
    assert tf._is_selected_cell(pbtf.HEADER_ROW_NAME,
                                pbtf.INDEX_COL_NAME) == True
    assert tf._is_selected_cell('a', 'cc') == False

    # Check case4)
    tf = pbtf.TableFormatter(rows=['b'],
                             columns=['bb'],
                             apply_to_header_and_index=True)
    assert tf._is_selected_cell('b', 'bb') == True
    assert tf._is_selected_cell('b', 'aa') == False
    assert tf._is_selected_cell('a', 'bb') == False
    assert tf._is_selected_cell('a', pbtf.INDEX_COL_NAME) == True
    assert tf._is_selected_cell('b', pbtf.INDEX_COL_NAME) == True
    assert tf._is_selected_cell(pbtf.HEADER_ROW_NAME, 'aa') == True
    assert tf._is_selected_cell(pbtf.HEADER_ROW_NAME, 'bb') == True
    assert tf._is_selected_cell(pbtf.HEADER_ROW_NAME,
                                pbtf.INDEX_COL_NAME) == True
Beispiel #3
0
def test_HTMLJinjaTableBlock_constructor_df_formatter(mock_formatter):
    mock_formatter.return_value = (df - 1)
    formatter = abtf.TableFormatter()
    table = abt.HTMLJinjaTableBlock(df, formatters=[formatter], use_default_formatters=False)
    mock_formatter.assert_called_with(df)
    assert table.df.equals(df - 1)
    # NotImplementedError should be handled
    mock_formatter.side_effect = NotImplementedError
    formatter = abtf.TableFormatter()
    table = abt.HTMLJinjaTableBlock(df, formatters=[formatter], use_default_formatters=False)
    mock_formatter.assert_called_with(df)
Beispiel #4
0
def test__aggregate_css_formatters_concatenation():
    css1 = 'aaaaa'
    formatter1 = abtf.TableFormatter()
    formatter1.dummy_function = MagicMock(return_value=css1)
    css2 = 'bbbbb'
    formatter2 = abtf.TableFormatter()
    formatter2.dummy_function = MagicMock(return_value=css2)
    table = abt.HTMLJinjaTableBlock(df, formatters=[formatter1, formatter2], use_default_formatters=False)
    res = table._aggregate_css_formatters('dummy_function')
    res = res.replace(' ', '')
    res = res.replace("'", '"')
    assert res == 'style="aaaaa;bbbbb"'
Beispiel #5
0
def test_HTMLJinjaTableBlock_modify_cell_content_not_implemented(mock_formatter):
    mock_formatter.side_effect = NotImplementedError
    formatter = abtf.TableFormatter()
    table = abt.HTMLJinjaTableBlock(df, formatters=[formatter], use_default_formatters=False)
    res = table.modify_cell_content(42., None, None)
    assert mock_formatter.call_count == 1
    assert res == 42.
Beispiel #6
0
def test_HTMLJinjaTableBlock_modify_cell_content(mock_formatter):
    mock_formatter.return_value = 1234
    formatter = abtf.TableFormatter()
    table = abt.HTMLJinjaTableBlock(df, formatters=[formatter], use_default_formatters=False)
    res = table.modify_cell_content(None, None, None)
    assert mock_formatter.call_count == 1
    assert res == 1234
Beispiel #7
0
def test_HTMLJinjaTableBlock_insert_additional_html_not_implemented(mock_formatter):
    mock_formatter.side_effect = NotImplementedError
    formatter = abtf.TableFormatter()
    table = abt.HTMLJinjaTableBlock(df, formatters=[formatter], use_default_formatters=False)
    res = table.insert_additional_html()
    mock_formatter.assert_called_once_with()
    assert res == ''
Beispiel #8
0
def test__aggregate_css_formatters_not_implemented():
    formatter = abtf.TableFormatter()
    formatter.dummy_function = MagicMock(side_effect=NotImplementedError())
    table = abt.HTMLJinjaTableBlock(df,
                                    formatters=[formatter],
                                    use_default_formatters=False)
    res = table._aggregate_css_formatters('dummy_function')
    assert res == 'style=""'
Beispiel #9
0
def test_HTMLJinjaTableBlock_constructor_formatters_list():
    table = abt.HTMLJinjaTableBlock(df, formatters=None, use_default_formatters=False)
    assert table.formatters == []
    table = abt.HTMLJinjaTableBlock(df, formatters=None, use_default_formatters=True)
    assert table.formatters == abtf.DEFAULT_FORMATTERS + abtf.DEFAULT_DECIMALS_FORMATTER
    formatter = abtf.TableFormatter()
    table = abt.HTMLJinjaTableBlock(df, formatters=[formatter], use_default_formatters=True)
    assert table.formatters == abtf.DEFAULT_FORMATTERS + [formatter] + abtf.DEFAULT_DECIMALS_FORMATTER
Beispiel #10
0
def test__aggregate_css_formatters_no_args():
    dummy_css = 'dummy_css'
    formatter = abtf.TableFormatter()
    formatter.dummy_function = MagicMock(return_value='dummy_css')
    table = abt.HTMLJinjaTableBlock(df, formatters=[formatter], use_default_formatters=False)
    res = table._aggregate_css_formatters('dummy_function')
    assert res == 'style="' + dummy_css + '"'
    formatter.dummy_function.assert_called_once_with()
Beispiel #11
0
def test__aggregate_css_formatters_args():
    dummy_css = 'dummy_css'
    dummy_parameter = '42'
    formatter = abtf.TableFormatter()
    formatter.dummy_function = MagicMock(side_effect=lambda x: dummy_css + x)
    table = abt.HTMLJinjaTableBlock(df, formatters=[formatter], use_default_formatters=False)
    res = table._aggregate_css_formatters('dummy_function', fmt_args=[dummy_parameter])
    assert res == 'style="' + dummy_css + dummy_parameter + '"'
    formatter.dummy_function.assert_called_once_with(dummy_parameter)
Beispiel #12
0
def test_TableFormatter__get_row_and_column_index():
    tf = pbtf.TableFormatter()
    df = pd.DataFrame(index=[pbtf.HEADER_ROW_NAME, 'a', 'b'], columns=[pbtf.INDEX_COL_NAME, 'aa', 'bb'])
    indices = tf._get_row_and_column_index('b', 'bb', df)
    assert indices.row == 2
    assert indices.column == 2

    indices = tf._get_row_and_column_index(pbtf.HEADER_ROW_NAME, pbtf.INDEX_COL_NAME, df)
    assert indices.row == -1
    assert indices.column == -1
Beispiel #13
0
def test_TableFormatter_create_cell_level_css():
    row_names = ['a']
    column_names = ['aa']
    tf = pbtf.TableFormatter(rows=row_names, columns=column_names, apply_to_header_and_index=False)
    cell_content = 1.
    tf._create_cell_level_css = lambda data: TEST_STRING

    data = FormatterData(cell_content, 'a', 'aa', df)
    res = tf.create_cell_level_css(data)
    assert res == TEST_STRING
    data = FormatterData(cell_content, 'b', 'aa', df)
    res = tf.create_cell_level_css(data)
    assert res is None
Beispiel #14
0
def test_TableFormatter_modify_cell_content():
    row_names = ['a']
    column_names = ['aa']
    tf = pbtf.TableFormatter(rows=row_names, columns=column_names, apply_to_header_and_index=False)
    cell_content = 1.
    tf._modify_cell_content = lambda data: TEST_STRING

    data = FormatterData(cell_content, 'a', 'aa', df)
    res = tf.modify_cell_content(data)
    assert res == TEST_STRING
    data = FormatterData(cell_content, 'b', 'aa', df)
    res = tf.modify_cell_content(data)
    assert res == cell_content
Beispiel #15
0
def test__jinja_header_row_name():
    df = pd.DataFrame(
        [["first", 2, 3], ["second", 5, 6]],
        columns=['a', 'b', 'c'],
    ).set_index("a")

    formatter = abtf.TableFormatter()
    formatter._create_row_level_css = MagicMock(return_value=None)
    table = abt.HTMLJinjaTableBlock(df,
                                    formatters=[formatter],
                                    use_default_formatters=False)

    container = MagicMock()
    actual_cfg = MagicMock()
    table._write_contents(MagicMock(), MagicMock())

    names = [
        args[0][0].name
        for args in formatter._create_row_level_css.call_args_list
    ]
    assert names[0] == abtf.HEADER_ROW_NAME
    assert names[1] == "first"
    assert names[2] == "second"
Beispiel #16
0
def test__jinja_calls_formatters_correctly():
    df = pd.DataFrame(columns=['a', 'b', 'c'], index=['x', 'y', 'z'])

    formatter = abtf.TableFormatter()
    formatter.create_cell_level_css = MagicMock(
        side_effect=NotImplementedError)
    table = abt.HTMLJinjaTableBlock(df,
                                    formatters=[formatter],
                                    use_default_formatters=False)

    container = MagicMock()
    actual_cfg = MagicMock()
    table._write_contents(container, actual_cfg)

    row_names = {
        args[0][0][1]
        for args in formatter.create_cell_level_css.call_args_list
    }
    col_names = {
        args[0][0][2]
        for args in formatter.create_cell_level_css.call_args_list
    }
    assert row_names == set(df.index) | {abtf.HEADER_ROW_NAME}
    assert col_names == set(df.columns) | {abtf.INDEX_COL_NAME}
Beispiel #17
0
def test_TableFormatter__is_selected_cell():
    # Expected behaviour:
    # 1) rows, columns is None, apply_to_header_and_index is True (default) => Work on all cells
    # 2) rows, columns is None, apply_to_header_and_index is False => Work on data cells
    # 3) rows, columns is not None, apply_to_header_and_index is False => Work on selected cells, including header,index
    # 4) rows, columns is not None, apply_to_header_and_index is True => Work on selected cells; header,index always
    # 5) rows, columns is None, apply_to_header_and_index is False, apply_to_header is True, apply_to_index is True
    # => Work on all cells (same as case 1))
    # 6) rows, columns is None, apply_to_header_and_index is False, apply_to_header is False, apply_to_index is True
    # => Work on all cells excluding header (note header includes top left corner)
    # 7) rows, columns is None, apply_to_header_and_index is False, apply_to_header is True, apply_to_index is False
    # => Work on all cells excluding index (note index does not include top left corner)
    # 8) rows, columns is not None, apply_to_header_and_index is False, apply_to_header is False, apply_to_index is True
    # => Work on selected cells; index always (note index does not include top left corner)
    # 9) rows, columns is not None, apply_to_header_and_index is False, apply_to_header is True, apply_to_index is False
    # => Work on selected cells; header always (note header includes top left corner)

    # Check case 1)
    tf = pbtf.TableFormatter(rows=None, columns=None)
    assert tf._is_selected_cell('a', 'aa') == True
    assert tf._is_selected_cell('a', pbtf.INDEX_COL_NAME) == True
    assert tf._is_selected_cell(pbtf.HEADER_ROW_NAME, 'aa') == True
    assert tf._is_selected_cell(pbtf.HEADER_ROW_NAME,
                                pbtf.INDEX_COL_NAME) == True

    # Check case 2)
    tf = pbtf.TableFormatter(rows=None,
                             columns=None,
                             apply_to_header_and_index=False)
    assert tf._is_selected_cell('a', 'aa') == True
    assert tf._is_selected_cell('a', pbtf.INDEX_COL_NAME) == False
    assert tf._is_selected_cell(pbtf.HEADER_ROW_NAME, 'aa') == False
    assert tf._is_selected_cell(pbtf.HEADER_ROW_NAME,
                                pbtf.INDEX_COL_NAME) == False

    # Check case 3)
    row_names = ['a', pbtf.HEADER_ROW_NAME]
    column_names = ['aa', pbtf.INDEX_COL_NAME]
    tf = pbtf.TableFormatter(rows=row_names,
                             columns=column_names,
                             apply_to_header_and_index=False)
    assert tf._is_selected_cell('a', 'aa') == True
    assert tf._is_selected_cell('a', 'bb') == False
    assert tf._is_selected_cell('b', 'aa') == False
    assert tf._is_selected_cell('a', pbtf.INDEX_COL_NAME) == True
    assert tf._is_selected_cell('b', pbtf.INDEX_COL_NAME) == False
    assert tf._is_selected_cell(pbtf.HEADER_ROW_NAME, 'aa') == True
    assert tf._is_selected_cell(pbtf.HEADER_ROW_NAME, 'bb') == False
    assert tf._is_selected_cell(pbtf.HEADER_ROW_NAME,
                                pbtf.INDEX_COL_NAME) == True
    assert tf._is_selected_cell('a', 'cc') == False

    # Check case 4)
    tf = pbtf.TableFormatter(rows=['b'],
                             columns=['bb'],
                             apply_to_header_and_index=True)
    assert tf._is_selected_cell('b', 'bb') == True
    assert tf._is_selected_cell('b', 'aa') == False
    assert tf._is_selected_cell('a', 'bb') == False
    assert tf._is_selected_cell('a', pbtf.INDEX_COL_NAME) == True
    assert tf._is_selected_cell('b', pbtf.INDEX_COL_NAME) == True
    assert tf._is_selected_cell(pbtf.HEADER_ROW_NAME, 'aa') == True
    assert tf._is_selected_cell(pbtf.HEADER_ROW_NAME, 'bb') == True
    assert tf._is_selected_cell(pbtf.HEADER_ROW_NAME,
                                pbtf.INDEX_COL_NAME) == True

    # Check case 5)
    tf = pbtf.TableFormatter(rows=None,
                             columns=None,
                             apply_to_header_and_index=(True, True))
    assert tf._is_selected_cell('a', 'aa') == True
    assert tf._is_selected_cell('a', pbtf.INDEX_COL_NAME) == True
    assert tf._is_selected_cell(pbtf.HEADER_ROW_NAME, 'aa') == True
    assert tf._is_selected_cell(pbtf.HEADER_ROW_NAME,
                                pbtf.INDEX_COL_NAME) == True

    # Check case 6)
    tf = pbtf.TableFormatter(rows=None,
                             columns=None,
                             apply_to_header_and_index=(False, True))
    assert tf._is_selected_cell('a', 'aa') == True
    assert tf._is_selected_cell('a', pbtf.INDEX_COL_NAME) == True
    assert tf._is_selected_cell(pbtf.HEADER_ROW_NAME, 'aa') == False
    assert tf._is_selected_cell(pbtf.HEADER_ROW_NAME,
                                pbtf.INDEX_COL_NAME) == False

    # Check case 7)
    tf = pbtf.TableFormatter(rows=None,
                             columns=None,
                             apply_to_header_and_index=(True, False))
    assert tf._is_selected_cell('a', 'aa') == True
    assert tf._is_selected_cell('a', pbtf.INDEX_COL_NAME) == False
    assert tf._is_selected_cell(pbtf.HEADER_ROW_NAME, 'aa') == True
    assert tf._is_selected_cell(pbtf.HEADER_ROW_NAME,
                                pbtf.INDEX_COL_NAME) == True

    # Check case 8)
    tf = pbtf.TableFormatter(rows=['b'],
                             columns=['bb'],
                             apply_to_header_and_index=(False, True))
    assert tf._is_selected_cell('b', 'bb') == True
    assert tf._is_selected_cell('b', 'aa') == False
    assert tf._is_selected_cell('a', 'bb') == False
    assert tf._is_selected_cell('a', pbtf.INDEX_COL_NAME) == True
    assert tf._is_selected_cell('b', pbtf.INDEX_COL_NAME) == True
    assert tf._is_selected_cell(pbtf.HEADER_ROW_NAME, 'aa') == False
    assert tf._is_selected_cell(pbtf.HEADER_ROW_NAME, 'bb') == False
    assert tf._is_selected_cell(pbtf.HEADER_ROW_NAME,
                                pbtf.INDEX_COL_NAME) == False

    # Check case 9)
    tf = pbtf.TableFormatter(rows=['b'],
                             columns=['bb'],
                             apply_to_header_and_index=(True, False))
    assert tf._is_selected_cell('b', 'bb') == True
    assert tf._is_selected_cell('b', 'aa') == False
    assert tf._is_selected_cell('a', 'bb') == False
    assert tf._is_selected_cell('a', pbtf.INDEX_COL_NAME) == False
    assert tf._is_selected_cell('b', pbtf.INDEX_COL_NAME) == False
    assert tf._is_selected_cell(pbtf.HEADER_ROW_NAME, 'aa') == True
    assert tf._is_selected_cell(pbtf.HEADER_ROW_NAME, 'bb') == True
    assert tf._is_selected_cell(pbtf.HEADER_ROW_NAME,
                                pbtf.INDEX_COL_NAME) == True