def _create_cell_level_css(self, data):
        """Create heatmap with ranges from min to (-threshold) and from threshold to max."""
        if isinstance(data.cell, numbers.Number):
            # Get selected cells. If axis is specified, get only data from the same row (axis=0) or column (axis=1)
            rows = self.rows
            columns = self.columns
            if self.axis == 0:
                rows = [data.row_name]
            elif self.axis == 1:
                columns = [data.column_name]

            # Get min max values from selected cells
            (min_value,
             max_value) = self._get_min_max_from_selected_cell_values(
                 rows, columns, data.df)

            # Create color with alpha according to value / (min or max)
            if data.cell > self.threshold:
                cell_color_alpha = data.cell / max_value
                cell_color = self.max_color + (cell_color_alpha, )
            elif data.cell < -self.threshold:
                cell_color_alpha = data.cell / min_value
                cell_color = self.min_color + (cell_color_alpha, )
            else:
                return CSS_BACKGROUND_COLOR + colors.css_color(colors.WHITE)
            return CSS_BACKGROUND_COLOR + colors.css_color(cell_color)
        else:
            return None
Beispiel #2
0
def test_FmtAppendTotalsColumn_cell_css():
    column_name = TEST_STRING
    fmt = pbtf.FmtAppendTotalsColumn(column_name=column_name)
    data = FormatterData(None, pbtf.HEADER_ROW_NAME, None, df)
    res = fmt._create_cell_level_css(data)
    assert res is None

    fmt = pbtf.FmtAppendTotalsColumn(bold=True,
                                     column_name=column_name,
                                     background_color=colors.LIGHT_GREY,
                                     font_color=colors.LIGHT_GREY)
    data = FormatterData(None, None, column_name, df)
    res = fmt._create_cell_level_css(data)
    assert pbtf.CSS_BOLD in res
    assert pbtf.CSS_COLOR + colors.css_color(colors.LIGHT_GREY) in res
    assert pbtf.CSS_BACKGROUND_COLOR + colors.css_color(
        colors.LIGHT_GREY) in res

    fmt = pbtf.FmtAppendTotalsRow(row_name=column_name,
                                  bold=None,
                                  background_color=None,
                                  font_color=None)
    data = FormatterData(None, 'a', None, df)
    res = fmt._create_cell_level_css(data)
    assert res is None
Beispiel #3
0
    def _create_cell_level_css(self, data):
        if data.row_name == HEADER_ROW_NAME:
            return None

        css_substrings = []

        if data.column_name == INDEX_COL_NAME:
            self.index_counter += 1
            # If we exceed index_level, assume we are re-run and reset to zero
            if self.index_counter == len(self.index_level):
                self.index_counter = 0
            indent = self.indent_px * self.index_level[self.index_counter]
            css_substrings.append('padding-left:' + str(indent) + 'px')

        if self.index_level[self.index_counter] != max(self.index_level):
            if self.bold:
                css_substrings.append(CSS_BOLD)
            if self.hline_color is not None:
                css_substrings.append('border-bottom:1px solid ' + self.hline_color)
                css_substrings.append('border-top:1px solid ' + self.hline_color)

        if self.level_background_colors is not None:
            level_background_color = self.level_background_colors[self.index_level[self.index_counter]]
            if level_background_color is not None:
                css_substrings.append(CSS_BACKGROUND_COLOR + colors.css_color(level_background_color))

        if self.level_text_colors is not None:
            level_text_color = self.level_text_colors[self.index_level[self.index_counter]]
            if level_text_color is not None:
                css_substrings.append(CSS_COLOR + colors.css_color(level_text_color))

        if len(css_substrings) != 0:
            return "; ".join(css_substrings)
        else:
            return None
Beispiel #4
0
def test_FmtAppendTotalsRow_cell_css():
    row_name = TEST_STRING
    fmt = pbtf.FmtAppendTotalsRow(row_name=row_name)
    data = FormatterData(None, pbtf.HEADER_ROW_NAME, None, df)
    res = fmt._create_cell_level_css(data)
    assert res is None

    fmt = pbtf.FmtAppendTotalsRow(bold=True, row_name=row_name, background_color=colors.LIGHT_GREY,
                                  font_color=colors.LIGHT_GREY)
    data = FormatterData(None, row_name, None, df)
    res = fmt._create_cell_level_css(data)
    assert pbtf.CSS_BOLD in res
    assert pbtf.CSS_COLOR + colors.css_color(colors.LIGHT_GREY) in res
    assert pbtf.CSS_BACKGROUND_COLOR + colors.css_color(colors.LIGHT_GREY) in res
    assert 'border-top:' in res
    assert 'solid' in res

    fmt = pbtf.FmtAppendTotalsRow(row_name=row_name, bold=None, background_color=None, font_color=None,
                                  hline_color=colors.LIGHT_ORANGE, hline_style=TEST_STRING)
    data = FormatterData(None, row_name, None, df)
    res = fmt._create_cell_level_css(data)
    assert 'border-top: ' + TEST_STRING + ' ' + colors.css_color(colors.LIGHT_ORANGE)

    fmt = pbtf.FmtAppendTotalsRow(row_name=row_name, bold=None, background_color=None, font_color=None)
    data = FormatterData(None, 'a', None, df)
    res = fmt._create_cell_level_css(data)
    assert res is None
Beispiel #5
0
 def __init__(self, first_color=colors.LIGHT_GREY, second_color=colors.WHITE, header_color=colors.WHITE,
              rows=None, columns=None, apply_to_header_and_index=True):
     super(FmtStripeBackground, self).__init__(rows, columns)
     self.first_color = colors.css_color(first_color)
     self.second_color = colors.css_color(second_color)
     self.header_color = colors.css_color(header_color)
     self.current_color = self.first_color
     return
Beispiel #6
0
def test_FmtHeatmap_cell_css():
    df_pn = df - 5.
    fmt = pbtf.FmtHeatmap(threshold=0.5)
    data = FormatterData(df_pn.min().min(), None, None, df_pn)
    res = fmt._create_cell_level_css(data)
    assert res == pbtf.CSS_BACKGROUND_COLOR + colors.css_color(colors.HEATMAP_RED)
    data = FormatterData(df_pn.max().max(), None, None, df_pn)
    res = fmt._create_cell_level_css(data)
    assert res == pbtf.CSS_BACKGROUND_COLOR + colors.css_color(colors.HEATMAP_GREEN)
    data = FormatterData(0.1, None, None, df_pn)
    res = fmt._create_cell_level_css(data)
    assert res == pbtf.CSS_BACKGROUND_COLOR + colors.css_color(colors.WHITE)
Beispiel #7
0
def test_FmtExpandMultiIndex_cell_css():
    mi_df = make_multiindex_table()
    fmt = pbtf.FmtExpandMultiIndex(bold=True,
                                   hline_color=colors.LIGHT_GREY,
                                   indent_px=123)
    df = fmt._modify_dataframe(mi_df)
    # Because this formatter is quite stateful, index column must be called first
    data = FormatterData(0., 'a', pbtf.INDEX_COL_NAME, df)
    res = fmt._create_cell_level_css(data)
    # Test that level0 row gets index indented
    assert 'padding-left:0px' in res
    # Test that level0 row gets all highlighting
    data = FormatterData(0., 'a', 'column1', df)
    res = fmt._create_cell_level_css(data)
    assert pbtf.CSS_BOLD in res
    assert 'border-bottom' in res
    assert 'border-top' in res
    assert colors.css_color(colors.LIGHT_GREY) in res
    # Run for index column again, so we proceed to next row
    data = FormatterData(0., 'a', pbtf.INDEX_COL_NAME, df)
    res = fmt._create_cell_level_css(data)
    # Test that level1 row gets index indented more and no highlighting
    data = FormatterData(0., 'aa', pbtf.INDEX_COL_NAME, df)
    res = fmt._create_cell_level_css(data)
    assert 'padding-left:123px' in res
    assert pbtf.CSS_BOLD not in res

    # Check that bold-highlighting is not used if not desired
    fmt = pbtf.FmtExpandMultiIndex(bold=False)
    df = fmt._modify_dataframe(mi_df)
    data = FormatterData(0., 'a', pbtf.INDEX_COL_NAME, df)
    res = fmt._create_cell_level_css(data)
    assert pbtf.CSS_BOLD not in res
Beispiel #8
0
def test_FmtStripeBackground():
    fmt = pbtf.FmtStripeBackground(first_color=colors.BLACK, second_color=colors.RED, header_color=colors.GREEN)
    # Check header color is applied
    data = FormatterData(0., pbtf.HEADER_ROW_NAME, pbtf.INDEX_COL_NAME, df)
    res = fmt._create_cell_level_css(data)
    assert res == (pbtf.CSS_BACKGROUND_COLOR + colors.css_color(colors.GREEN))

    # Check that first line is filled with first_color
    data = FormatterData(0., 'a', 'aa', df)
    res = fmt._create_cell_level_css(data)
    assert res == (pbtf.CSS_BACKGROUND_COLOR + colors.css_color(colors.BLACK))

    # Check that second line is filled with second color
    data = FormatterData(0., 'b', pbtf.INDEX_COL_NAME, df)
    res = fmt._create_cell_level_css(data)
    assert res == (pbtf.CSS_BACKGROUND_COLOR + colors.css_color(colors.RED))
Beispiel #9
0
 def _create_cell_level_css(self, data):
     css_substrings = []
     for side, value in iteritems(self.padding):
         if value is not None:
             css_substrings.append('border-' + side + ':' + str(value) + self.length_unit + ' ' + self.style + ' ' +
                                   colors.css_color(self.color))
     return "; ".join(css_substrings)
 def _create_cell_level_css(self, data):
     """Font style and color"""
     css_substrings = [CSS_COLOR + colors.css_color(self.font_color)]
     if self.bold:
         css_substrings.append(CSS_BOLD)
     if self.italic:
         css_substrings.append('font-style:italic;')
     return "; ".join(css_substrings)
Beispiel #11
0
    def _create_cell_level_css(self, data):
        """Set fontsize for cell as CSS format."""
        if data.column_name != self.column_name:
            return None

        css_substrings = []
        if self.bold is not None:
            css_substrings.append(CSS_BOLD)
        if self.background_color is not None:
            css_substrings.append(CSS_BACKGROUND_COLOR + colors.css_color(self.background_color))
        if self.font_color is not None:
            css_substrings.append(CSS_COLOR + colors.css_color(self.font_color))

        if len(css_substrings) != 0:
            return "; ".join(css_substrings)
        else:
            return None
Beispiel #12
0
    def __init__(self, total_columns=None, operator=OP_SUM, bold=True, indent_px=20, hline_color=colors.DARK_BLUE,
                 level_background_colors=None):
        # Operate on all columns: Set self.columns to None
        super(FmtExpandMultiIndex, self).__init__(None, None)

        if total_columns is None:
            total_columns = []
        self.total_columns = total_columns
        self.operator = operator
        self.bold = bold
        self.indent_px = indent_px
        self.index_level = []
        self.hline_color = colors.css_color(hline_color)
        self.index_counter = -1
        self.level_background_colors = level_background_colors
        return
 def _create_cell_level_css(self, data):
     """Set a lot of css tags to rotate the text in the table header."""
     if data.row_name == HEADER_ROW_NAME and (self.columns is None or data.column_name in self.columns):
         css_substrings = []
         if self.rotate_deg != 0:
             css_substrings.append('-webkit-transform-origin:0% 100%')
             css_substrings.append('-webkit-transform:translate(80%, 0%) rotate(-' + str(self.rotate_deg) + 'deg)')
             css_substrings.append('transform-origin:0% 100%')
             css_substrings.append('transform:translate(80%, 0%) rotate(-' + str(self.rotate_deg) + 'deg)')
         if self.no_wrap:
             css_substrings.append('white-space:nowrap')
         if data.column_name == INDEX_COL_NAME and self.index_width is not None:
             css_substrings.append(CSS_WIDTH + self.index_width)
         elif self.column_width is not None:
             css_substrings.append('width:' + self.column_width)
         if self.color is not None:
             css_substrings.append(CSS_BACKGROUND_COLOR + colors.css_color(self.color))
         return "; ".join(css_substrings)
     else:
         return None
Beispiel #14
0
def test_FmtHighlightBackground():
    c = colors.BLACK
    fmt = pbtf.FmtHighlightBackground(color=c)
    res = fmt._create_cell_level_css(None)
    assert pbtf.CSS_BACKGROUND_COLOR + colors.css_color(c) in res
Beispiel #15
0
def test_FmtHighlightText_font_color():
    c = colors.BLACK
    fmt = pbtf.FmtHighlightText(font_color=c)
    res = fmt._create_cell_level_css(None)
    assert (pbtf.CSS_COLOR + colors.css_color(c)) in res
 def _create_cell_level_css(self, data):
     """Set background color"""
     return CSS_BACKGROUND_COLOR + colors.css_color(self.color)