From d163a82e0efb85b2931ccab3b33456d416409d22 Mon Sep 17 00:00:00 2001 From: Thomas Oettli Date: Sat, 30 Aug 2025 13:52:14 +0200 Subject: [PATCH] Fix truncating values in table --- dnsmgr/__init__.py | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/dnsmgr/__init__.py b/dnsmgr/__init__.py index 48df858..e242a55 100644 --- a/dnsmgr/__init__.py +++ b/dnsmgr/__init__.py @@ -55,18 +55,20 @@ def prettytable(field_names, rows, truncate=False): for field in t.field_names: t.align[field] = 'l' - if truncate: - max_total_len = 0 - max_name_val_ttl_len = 0 - for row in rows: - max_total_len = max(max_total_len, sum(len(col) for col in row)) - max_name_val_ttl_len = max(max_name_val_ttl_len, sum(len(s) for s in row[0:-1])) + if truncate and rows: + n_cols = len(rows[0]) + max_col_lengths = [0] * n_cols - overhead_len = len(row) * 4 + for row in rows: + for index in range(0, len(row)): + max_col_lengths[index] = max(max_col_lengths[index], len(row[index]) + 3) + + max_total_len = sum(max_col_lengths) + 2 + max_pre_len = sum(max_col_lengths[0:-1]) + 2 terminal_width = os.get_terminal_size().columns - if max_total_len + overhead_len >= terminal_width: - max_value_len = terminal_width - max_name_val_ttl_len - overhead_len + if max_total_len >= terminal_width: + max_value_len = terminal_width - max_pre_len - 3 if max_value_len < 5: raise RuntimeError('terminal is too small') for i in range(len(rows)):