Skip to content

Commit

Permalink
Add enable_style_filter method and disable_style_filter method to wri…
Browse files Browse the repository at this point in the history
…ter classes
  • Loading branch information
thombashi committed Oct 8, 2023
1 parent 720ab08 commit 2741a9e
Show file tree
Hide file tree
Showing 2 changed files with 75 additions and 0 deletions.
32 changes: 32 additions & 0 deletions pytablewriter/writer/_table_writer.py
Original file line number Diff line number Diff line change
Expand Up @@ -238,6 +238,7 @@ def __init__(self, **kwargs: Any) -> None:
self.column_styles = kwargs.get("column_styles", [])

self._style_filters: List[StyleFilterFunc] = copy.deepcopy(DEFAULT_STYLE_FILTERS)
self._enable_style_filter = True
self._styler = self._create_styler(self)
self.style_filter_kwargs: Dict[str, Any] = kwargs.get("style_filter_kwargs", {})
self.__colorize_terminal = kwargs.get("colorize_terminal", True)
Expand Down Expand Up @@ -509,6 +510,34 @@ def clear_theme(self) -> None:
self._style_filters = copy.deepcopy(DEFAULT_STYLE_FILTERS)
self.__clear_preprocess()

def enable_style_filter(self) -> None:
"""Enable style filters."""

if self._enable_style_filter is True:
return

self._enable_style_filter = True
self.__clear_preprocess()

def disable_style_filter(self, clear_filters: bool = False) -> None:
"""Disable style filters.
Args:
clear_filters (bool):
If |True|, clear all of the style filters.
Defaults to |False|.
"""

if clear_filters:
self.clear_theme()
return

if self._enable_style_filter is False:
return

self._enable_style_filter = False
self.__clear_preprocess()

def set_style(self, column: Union[str, int], style: Style) -> None:
"""Set |Style| for a specific column.
Expand Down Expand Up @@ -981,6 +1010,9 @@ def _apply_style_to_row_item(
def _fetch_style_from_filter(
self, row_idx: int, col_dp: ColumnDataProperty, value_dp: DataProperty, default_style: Style
) -> Style:
if not self._enable_style_filter:
return default_style

self.style_filter_kwargs.update({"writer": self})

style: Optional[Style] = None
Expand Down
43 changes: 43 additions & 0 deletions test/writer/text/test_writer.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
from typing import Optional

from pytablewriter import TableWriterFactory
from pytablewriter.style import Cell, Style


class Test_text_writer:
def test_normal_style_filter(self):
def style_filter(cell: Cell, **kwargs) -> Optional[Style]:
if cell.is_header_row():
return None

if isinstance(cell.value, int):
return Style(align="left")

if cell.value == "c":
return Style(align="center")

if cell.value == "r":
return Style(align="right")

return None

writer = TableWriterFactory.create_from_format_name(
format_name="html",
table_name="style filter",
headers=["A", "B", "C"],
value_matrix=[
[1, "c", "r"],
[2.2, "left", "left"],
],
margin=1,
)
writer.add_style_filter(style_filter)
output_w_filter = writer.dumps()

writer.disable_style_filter()
output_wo_filter = writer.dumps()
assert output_w_filter != output_wo_filter

writer.enable_style_filter()
output_wo_filter_2 = writer.dumps()
assert output_w_filter == output_wo_filter_2

0 comments on commit 2741a9e

Please sign in to comment.