setting the text color, background, etc... using ANSI escape
sequences."""
+import contextlib
import difflib
import io
import logging
import re
import sys
from abc import abstractmethod
-from typing import Any, Callable, Dict, Iterable, Optional, Tuple
+from typing import Any, Callable, Dict, Iterable, Literal, Optional, Tuple
from overrides import overrides
import logging_utils
import string_utils
-
logger = logging.getLogger(__name__)
# https://en.wikipedia.org/wiki/ANSI_escape_code
return bg_24bit(red, green, blue)
-class StdoutInterceptor(io.TextIOBase):
- """An interceptor for data written to stdout. Use as a context.
+class StdoutInterceptor(io.TextIOBase, contextlib.AbstractContextManager):
+ """An interceptor for data written to stdout. Use as a context."""
- """
def __init__(self):
super().__init__()
self.saved_stdout: io.TextIO = None
sys.stdout = self
return self
- def __exit__(self, *args) -> Optional[bool]:
+ def __exit__(self, *args) -> Literal[False]:
sys.stdout = self.saved_stdout
print(self.buf)
- return None
+ return False
class ProgrammableColorizer(StdoutInterceptor):
something (usually add color to) the match.
"""
+
def __init__(
self,
patterns: Iterable[Tuple[re.Pattern, Callable[[Any, re.Pattern], str]]],
if __name__ == '__main__':
+
def main() -> None:
import doctest