forked from extern/httpie-cli
ff6f1887b0
* Refactor tests to use a text-based standard output. (#1318) * Implement new style `--help` (#1316) * Implement man page generation (#1317) * Implement rich progress bars. (#1324) * Man page deployment & isolation. (#1325) * Remove all unsorted usages in the CLI docs * Implement isolated mode for man page generation * Add a CI job for autogenerated files * Distribute man pages through PyPI * Pin the date for man pages. (#1326) * Hide suppressed arguments from --help/man pages (#1329) * Change download spinner to line (#1328) * Regenerate autogenerated files when pushed against to master. (#1339) * Highlight options (#1340) * Additional man page enhancements (#1341) * Group options by the parent category & highlight -o/--o * Display (and underline) the METAVAR on man pages. * Make help message processing more robust (#1342) * Inherit `help` from `short_help` * Don't mirror short_help directly. * Fixup the serialization * Use `pager` and `man` on `--manual` when applicable (#1343) * Run `man $program` on --manual * Page the output of `--manual` for systems that lack man pages * Improvements over progress bars (separate bar, status line, etc.) (#1346) * Redesign the --help layout. * Make our usage of rich compatible with 9.10.0 * Add `HTTPIE_NO_MAN_PAGES` * Make tests also patch os.get_terminal_size * Generate CLI spec from HTTPie & Man Page Hook (#1354) * Generate CLI spec from HTTPie & add man page hook * Use the full command space for the option headers
36 lines
908 B
Python
36 lines
908 B
Python
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
|