From dde86e7be6311a1e3274650b0f8a338beb620ead Mon Sep 17 00:00:00 2001
From: Maxim Gonchar <maxim.mg.gonchar@gmail.com>
Date: Thu, 27 Apr 2023 17:26:17 +0300
Subject: [PATCH] feat: `ParametersStorage.to_table` setup truncation

---
 model_tools/parameters_storage.py | 20 +++++++++++++++++++-
 1 file changed, 19 insertions(+), 1 deletion(-)

diff --git a/model_tools/parameters_storage.py b/model_tools/parameters_storage.py
index 20aee2a..6372cbe 100644
--- a/model_tools/parameters_storage.py
+++ b/model_tools/parameters_storage.py
@@ -11,6 +11,11 @@ import pandas as pd
 pd.set_option('display.max_rows', None)
 pd.set_option('display.max_colwidth', 100)
 
+from shutil import get_terminal_size
+
+def trunc(text: str, width: int) -> str:
+    return '\n'.join(line[:width] for line in text.split('\n'))
+
 class ParametersStorage(NestedMKDict):
     def to_dict(self, **kwargs) -> list:
         return self.visit(ParametersVisitor(kwargs)).data
@@ -39,11 +44,24 @@ class ParametersStorage(NestedMKDict):
         df = self.to_df()
         return df.to_string(**kwargs)
 
-    def to_table(self, *, df_kwargs: dict={}, **kwargs) -> str:
+    def to_table(
+        self,
+        *,
+        df_kwargs: dict={},
+        truncate: Union[int, bool] = False,
+        **kwargs
+    ) -> str:
         df = self.to_df(**df_kwargs)
         kwargs.setdefault('headers', df.columns)
         ret = tabulate(df, **kwargs)
 
+        if truncate:
+            if isinstance(truncate, bool):
+                truncate = get_terminal_size().columns
+
+            return trunc(ret, width=truncate)
+
+
         return ret
 
     def to_latex(self, *, return_df: bool=False, **kwargs) -> Union[str, Tuple[str, DataFrame]]:
-- 
GitLab