Cleanup
[python_utils.git] / text_utils.py
index 4384a1e6134810982e9227d2bb1dfdb517627f72..564d67eb98c479efdfa00671a98ea179f0f189a8 100644 (file)
@@ -3,22 +3,25 @@
 
 """Utilities for dealing with "text"."""
 
+import contextlib
 import logging
 import math
 import sys
 from collections import defaultdict
-from typing import Dict, Generator, List, NamedTuple, Optional, Tuple
+from dataclasses import dataclass
+from typing import Dict, Generator, List, Literal, Optional, Tuple
 
 from ansi import fg, reset
 
 logger = logging.getLogger(__file__)
 
 
-class RowsColumns(NamedTuple):
+@dataclass
+class RowsColumns:
     """Row + Column"""
 
-    rows: int
-    columns: int
+    rows: int = 0
+    columns: int = 0
 
 
 def get_console_rows_columns() -> RowsColumns:
@@ -68,13 +71,13 @@ def bar_graph(
     include_text=True,
     width=70,
     fgcolor=fg("school bus yellow"),
-    reset=reset(),
+    reset_seq=reset(),
     left_end="[",
     right_end="]",
 ) -> str:
     """Returns a string containing a bar graph.
 
-    >>> bar_graph(0.5, fgcolor='', reset='')
+    >>> bar_graph(0.5, fgcolor='', reset_seq='')
     '[███████████████████████████████████                                   ] 50.0%'
 
     """
@@ -101,7 +104,7 @@ def bar_graph(
         + "█" * whole_width
         + part_char
         + " " * (width - whole_width - 1)
-        + reset
+        + reset_seq
         + right_end
         + " "
         + text
@@ -261,7 +264,7 @@ def wrap_string(text: str, n: int) -> str:
     return out
 
 
-class Indenter(object):
+class Indenter(contextlib.AbstractContextManager):
     """
     with Indenter(pad_count = 8) as i:
         i.print('test')
@@ -289,10 +292,11 @@ class Indenter(object):
         self.level += 1
         return self
 
-    def __exit__(self, exc_type, exc_value, exc_tb):
+    def __exit__(self, exc_type, exc_value, exc_tb) -> Literal[False]:
         self.level -= 1
         if self.level < -1:
             self.level = -1
+        return False
 
     def print(self, *arg, **kwargs):
         import string_utils