Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 5 additions & 3 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -1,15 +1,17 @@
repos:
- repo: https://github.com/python/black
rev: 22.3.0
rev: 25.1.0
hooks:
- id: black
args: [--safe]
language_version: python3
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v2.2.3
rev: v6.0.0
hooks:
- id: trailing-whitespace
- id: check-yaml
- id: debug-statements
- repo: https://github.com/pycqa/flake8
rev: 7.3.0
hooks:
- id: flake8
language_version: python3
12 changes: 6 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -503,10 +503,10 @@ format:
>>> print(tabulate(table, headers, tablefmt="asciidoc"))
[cols="8<,7>",options="header"]
|====
| item | qty
| spam | 42
| eggs | 451
| bacon | 0
| item | qty
| spam | 42
| eggs | 451
| bacon | 0
|====

```
Expand Down Expand Up @@ -1065,11 +1065,11 @@ the lines being wrapped would probably be significantly longer than this.

Text is preferably wrapped on whitespaces and right after the hyphens in hyphenated words.

break_long_words (default: True) If true, then words longer than width will be broken in order to ensure that no lines are longer than width.
break_long_words (default: True) If true, then words longer than width will be broken in order to ensure that no lines are longer than width.
If it is false, long words will not be broken, and some lines may be longer than width.
(Long words will be put on a line by themselves, in order to minimize the amount by which width is exceeded.)

break_on_hyphens (default: True) If true, wrapping will occur preferably on whitespaces and right after hyphens in compound words, as it is customary in English.
break_on_hyphens (default: True) If true, wrapping will occur preferably on whitespaces and right after hyphens in compound words, as it is customary in English.
If false, only whitespaces will be considered as potentially good places for line breaks.

```pycon
Expand Down
38 changes: 29 additions & 9 deletions tabulate/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -296,7 +296,7 @@ def make_header_line(is_header, colwidths, colaligns):
else:
raise ValueError(
" _asciidoc_row() requires two (colwidths, colaligns) "
+ "or three (cell_values, colwidths, colaligns) arguments) "
"or three (cell_values, colwidths, colaligns) arguments) "
)


Expand Down Expand Up @@ -1412,7 +1412,7 @@ def _prepend_row_index(rows, index):
if isinstance(index, Sized) and len(index) != len(rows):
raise ValueError(
"index must be as long as the number of data rows: "
+ f"len(index)={len(index)} len(rows)={len(rows)}"
f"len(index)={len(index)} len(rows)={len(rows)}"
)
sans_rows, separating_lines = _remove_separating_lines(rows)
new_rows = []
Expand Down Expand Up @@ -1588,9 +1588,11 @@ def _normalize_tabular_data(tabular_data, headers, showindex="default"):
if headers == "keys":
headers = field_names
rows = [
[getattr(row, f) for f in field_names]
if not _is_separating_line(row)
else row
(
[getattr(row, f) for f in field_names]
if not _is_separating_line(row)
else row
)
for row in rows
]

Expand Down Expand Up @@ -1638,7 +1640,13 @@ def _normalize_tabular_data(tabular_data, headers, showindex="default"):
return rows, headers, headers_pad


def _wrap_text_to_colwidths(list_of_lists, colwidths, numparses=True, break_long_words=_BREAK_LONG_WORDS, break_on_hyphens=_BREAK_ON_HYPHENS):
def _wrap_text_to_colwidths(
list_of_lists,
colwidths,
numparses=True,
break_long_words=_BREAK_LONG_WORDS,
break_on_hyphens=_BREAK_ON_HYPHENS,
):
if len(list_of_lists):
num_cols = len(list_of_lists[0])
else:
Expand All @@ -1655,7 +1663,11 @@ def _wrap_text_to_colwidths(list_of_lists, colwidths, numparses=True, break_long
continue

if width is not None:
wrapper = _CustomTextWrap(width=width, break_long_words=break_long_words, break_on_hyphens=break_on_hyphens)
wrapper = _CustomTextWrap(
width=width,
break_long_words=break_long_words,
break_on_hyphens=break_on_hyphens,
)
casted_cell = str(cell)
wrapped = [
"\n".join(wrapper.wrap(line))
Expand Down Expand Up @@ -2258,7 +2270,11 @@ def tabulate(

numparses = _expand_numparse(disable_numparse, num_cols)
list_of_lists = _wrap_text_to_colwidths(
list_of_lists, maxcolwidths, numparses=numparses, break_long_words=break_long_words, break_on_hyphens=break_on_hyphens
list_of_lists,
maxcolwidths,
numparses=numparses,
break_long_words=break_long_words,
break_on_hyphens=break_on_hyphens,
)

if maxheadercolwidths is not None:
Expand All @@ -2272,7 +2288,11 @@ def tabulate(

numparses = _expand_numparse(disable_numparse, num_cols)
headers = _wrap_text_to_colwidths(
[headers], maxheadercolwidths, numparses=numparses, break_long_words=break_long_words, break_on_hyphens=break_on_hyphens
[headers],
maxheadercolwidths,
numparses=numparses,
break_long_words=break_long_words,
break_on_hyphens=break_on_hyphens,
)[0]

# empty values in the first column of RST tables should be escaped (issue #82)
Expand Down
10 changes: 4 additions & 6 deletions test/test_api.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
"""API properties.

"""
"""API properties."""

from tabulate import tabulate, tabulate_formats, simple_separated_format
from common import skip
Expand All @@ -14,7 +12,7 @@


def test_tabulate_formats():
"API: tabulate_formats is a list of strings" ""
"API: tabulate_formats is a list of strings"
supported = tabulate_formats
print("tabulate_formats = %r" % supported)
assert type(supported) is list
Expand All @@ -35,7 +33,7 @@ def _check_signature(function, expected_sig):


def test_tabulate_signature():
"API: tabulate() type signature is unchanged" ""
"API: tabulate() type signature is unchanged"
assert type(tabulate) is type(lambda: None) # noqa
expected_sig = [
("tabular_data", _empty),
Expand Down Expand Up @@ -63,7 +61,7 @@ def test_tabulate_signature():


def test_simple_separated_format_signature():
"API: simple_separated_format() type signature is unchanged" ""
"API: simple_separated_format() type signature is unchanged"
assert type(simple_separated_format) is type(lambda: None) # noqa
expected_sig = [("separator", _empty)]
_check_signature(simple_separated_format, expected_sig)
4 changes: 1 addition & 3 deletions test/test_cli.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
"""Command-line interface.

"""
"""Command-line interface."""

import os
import sys
Expand Down
10 changes: 8 additions & 2 deletions test/test_internal.py
Original file line number Diff line number Diff line change
Expand Up @@ -180,7 +180,9 @@ def test_wrap_text_wide_chars():
except ImportError:
skip("test_wrap_text_wide_chars is skipped")

rows = [["청자청자청자청자청자", "약간 감싸면 더 잘 보일 수있는 다소 긴 설명입니다"]]
rows = [
["청자청자청자청자청자", "약간 감싸면 더 잘 보일 수있는 다소 긴 설명입니다"]
]
widths = [5, 20]
expected = [
[
Expand Down Expand Up @@ -244,7 +246,11 @@ def test_wrap_text_to_colwidths_colors_wide_char():
except ImportError:
skip("test_wrap_text_to_colwidths_colors_wide_char is skipped")

data = [[("\033[31m약간 감싸면 더 잘 보일 수있는 다소 긴" " 설명입니다 설명입니다 설명입니다 설명입니다 설명\033[0m")]]
data = [
[
"\033[31m약간 감싸면 더 잘 보일 수있는 다소 긴 설명입니다 설명입니다 설명입니다 설명입니다 설명\033[0m"
]
]
result = T._wrap_text_to_colwidths(data, [30])

expected = [
Expand Down
2 changes: 2 additions & 0 deletions test/test_output.py
Original file line number Diff line number Diff line change
Expand Up @@ -3320,6 +3320,7 @@ def test_preserve_whitespace():
result = tabulate(test_table, table_headers, preserve_whitespace=False)
assert_equal(expected, result)


def test_break_long_words():
"Output: Default table output, with breakwords true."
table_headers = ["h1", "h2", "h3"]
Expand All @@ -3335,6 +3336,7 @@ def test_break_long_words():
result = tabulate(test_table, table_headers, maxcolwidths=3, break_long_words=True)
assert_equal(expected, result)


def test_break_on_hyphens():
"Output: Default table output, with break on hyphens true."
table_headers = ["h1", "h2", "h3"]
Expand Down
Loading