"""Rich text and beautiful formatting in the terminal.""" import os from typing import Any, IO, Optional, TYPE_CHECKING __all__ = ["get_console", "reconfigure", "print", "inspect"] if TYPE_CHECKING: from .console import Console # Global console used by alternative print _console: Optional["Console"] = None _IMPORT_CWD = os.path.abspath(os.getcwd()) def get_console() -> "Console": """Get a global :class:`~rich.console.Console` instance. This function is used when Rich requires a Console, and hasn't been explicitly given one. Returns: Console: A console instance. """ global _console if _console is None: from .console import Console _console = Console() return _console def reconfigure(*args, **kwargs) -> None: """Reconfigures the global console bu replacing it with another. Args: console (Console): Replacement console instance. """ from rich.console import Console new_console = Console(*args, **kwargs) _console.__dict__ = new_console.__dict__ def print(*objects: Any, sep=" ", end="\n", file: IO[str] = None, flush: bool = False): r"""Print object(s) supplied via positional arguments. This function has an identical signature to the built-in print. For more advanced features, see the :class:`~rich.console.Console` class. Args: sep (str, optional): Separator between printed objects. Defaults to " ". end (str, optional): Character to write at end of output. Defaults to "\\n". file (IO[str], optional): File to write to, or None for stdout. Defaults to None. flush (bool, optional): Has no effect as Rich always flushes output. Defaults to False. """ from .console import Console write_console = get_console() if file is None else Console(file=file) return write_console.print(*objects, sep=sep, end=end) def inspect( obj: Any, *, console: "Console" = None, title: str = None, help: bool = False, methods: bool = False, docs: bool = True, private: bool = False, dunder: bool = False, sort: bool = True, all: bool = False, value: bool = True ): """Inspect any Python object. * inspect() to see summarized info. * inspect(, methods=True) to see methods. * inspect(, help=True) to see full (non-abbreviated) help. * inspect(, private=True) to see private attributes (single underscore). * inspect(, dunder=True) to see attributes beginning with double underscore. * inspect(, all=True) to see all attributes. Args: obj (Any): An object to inspect. title (str, optional): Title to display over inspect result, or None use type. Defaults to None. help (bool, optional): Show full help text rather than just first paragraph. Defaults to False. methods (bool, optional): Enable inspection of callables. Defaults to False. docs (bool, optional): Also render doc strings. Defaults to True. private (bool, optional): Show private attributes (beginning with underscore). Defaults to False. dunder (bool, optional): Show attributes starting with double underscore. Defaults to False. sort (bool, optional): Sort attributes alphabetically. Defaults to True. all (bool, optional): Show all attributes. Defaults to False. value (bool, optional): Pretty print value. Defaults to True. """ _console = console or get_console() from rich._inspect import Inspect # Special case for inspect(inspect) is_inspect = obj is inspect _inspect = Inspect( obj, title=title, help=is_inspect or help, methods=is_inspect or methods, docs=is_inspect or docs, private=private, dunder=dunder, sort=sort, all=all, value=value, ) _console.print(_inspect) if __name__ == "__main__": # pragma: no cover print("Hello, **World**")