40 lines
908 B
Python
40 lines
908 B
Python
|
|
"""Central Rich output helpers.
|
||
|
|
|
||
|
|
Opinionated: `rich` is a required dependency.
|
||
|
|
|
||
|
|
This module centralizes Console instances so tables/panels render consistently and
|
||
|
|
so callers can choose stdout vs stderr explicitly (important for pipeline-safe
|
||
|
|
output).
|
||
|
|
"""
|
||
|
|
|
||
|
|
from __future__ import annotations
|
||
|
|
|
||
|
|
import sys
|
||
|
|
from typing import Any, TextIO
|
||
|
|
|
||
|
|
from rich.console import Console
|
||
|
|
|
||
|
|
|
||
|
|
_STDOUT_CONSOLE = Console(file=sys.stdout)
|
||
|
|
_STDERR_CONSOLE = Console(file=sys.stderr)
|
||
|
|
|
||
|
|
|
||
|
|
def stdout_console() -> Console:
|
||
|
|
return _STDOUT_CONSOLE
|
||
|
|
|
||
|
|
|
||
|
|
def stderr_console() -> Console:
|
||
|
|
return _STDERR_CONSOLE
|
||
|
|
|
||
|
|
|
||
|
|
def console_for(file: TextIO | None) -> Console:
|
||
|
|
if file is None or file is sys.stdout:
|
||
|
|
return _STDOUT_CONSOLE
|
||
|
|
if file is sys.stderr:
|
||
|
|
return _STDERR_CONSOLE
|
||
|
|
return Console(file=file)
|
||
|
|
|
||
|
|
|
||
|
|
def rprint(renderable: Any = "", *, file: TextIO | None = None) -> None:
|
||
|
|
console_for(file).print(renderable)
|