import sys
from typing import Any, Callable, Dict, Iterable, Optional, Tuple
+from overrides import overrides
+
+import logging_utils
+
logger = logging.getLogger(__name__)
# https://en.wikipedia.org/wiki/ANSI_escape_code
return rgb
+@logging_utils.squelch_repeated_log_messages(1)
def fg(name: Optional[str] = "",
red: Optional[int] = None,
green: Optional[int] = None,
force_216color: bool = False) -> str:
import string_utils
+ if name is not None and name == 'reset':
+ return '\033[39m'
+
if name is not None and string_utils.is_full_string(name):
rgb = _find_color_by_name(name)
return fg(
force_216color: bool = False) -> str:
import string_utils
+ if name is not None and name == 'reset':
+ return '\033[49m'
+
if name is not None and string_utils.is_full_string(name):
rgb = _find_color_by_name(name)
return bg(
self.buf = ''
@abstractmethod
- def write(self, s):
+ def write(self, s: str):
pass
def __enter__(self) -> None:
super().__init__()
self.patterns = [_ for _ in patterns]
+ @overrides
def write(self, s: str):
for pattern in self.patterns:
s = pattern[0].sub(pattern[1], s)