import os from typing import Iterator from contextlib import contextmanager from rich.console import Console, RenderableType from rich.highlighter import Highlighter def render_as_string(renderable: RenderableType) -> str: """Render any `rich` object in a fake console and return a *style-less* version of it as a string.""" with open(os.devnull, 'w') as null_stream: fake_console = Console(file=null_stream, record=True) fake_console.print(renderable) return fake_console.export_text() @contextmanager def enable_highlighter( console: Console, highlighter: Highlighter, ) -> Iterator[Console]: """Enable a higlighter temporarily.""" original_highlighter = console.highlighter try: console.highlighter = highlighter yield console finally: console.highlighter = original_highlighter