Tipragot
628be439b8
Cela permet de ne pas avoir de problèmes de compatibilité car python est dans le git.
87 lines
2.8 KiB
Python
87 lines
2.8 KiB
Python
from collections.abc import Mapping
|
|
from typing import TYPE_CHECKING, Any, Optional, Tuple
|
|
|
|
from .highlighter import ReprHighlighter
|
|
from .panel import Panel
|
|
from .pretty import Pretty
|
|
from .table import Table
|
|
from .text import Text, TextType
|
|
|
|
if TYPE_CHECKING:
|
|
from .console import ConsoleRenderable
|
|
|
|
|
|
def render_scope(
|
|
scope: "Mapping[str, Any]",
|
|
*,
|
|
title: Optional[TextType] = None,
|
|
sort_keys: bool = True,
|
|
indent_guides: bool = False,
|
|
max_length: Optional[int] = None,
|
|
max_string: Optional[int] = None,
|
|
) -> "ConsoleRenderable":
|
|
"""Render python variables in a given scope.
|
|
|
|
Args:
|
|
scope (Mapping): A mapping containing variable names and values.
|
|
title (str, optional): Optional title. Defaults to None.
|
|
sort_keys (bool, optional): Enable sorting of items. Defaults to True.
|
|
indent_guides (bool, optional): Enable indentation guides. Defaults to False.
|
|
max_length (int, optional): Maximum length of containers before abbreviating, or None for no abbreviation.
|
|
Defaults to None.
|
|
max_string (int, optional): Maximum length of string before truncating, or None to disable. Defaults to None.
|
|
|
|
Returns:
|
|
ConsoleRenderable: A renderable object.
|
|
"""
|
|
highlighter = ReprHighlighter()
|
|
items_table = Table.grid(padding=(0, 1), expand=False)
|
|
items_table.add_column(justify="right")
|
|
|
|
def sort_items(item: Tuple[str, Any]) -> Tuple[bool, str]:
|
|
"""Sort special variables first, then alphabetically."""
|
|
key, _ = item
|
|
return (not key.startswith("__"), key.lower())
|
|
|
|
items = sorted(scope.items(), key=sort_items) if sort_keys else scope.items()
|
|
for key, value in items:
|
|
key_text = Text.assemble(
|
|
(key, "scope.key.special" if key.startswith("__") else "scope.key"),
|
|
(" =", "scope.equals"),
|
|
)
|
|
items_table.add_row(
|
|
key_text,
|
|
Pretty(
|
|
value,
|
|
highlighter=highlighter,
|
|
indent_guides=indent_guides,
|
|
max_length=max_length,
|
|
max_string=max_string,
|
|
),
|
|
)
|
|
return Panel.fit(
|
|
items_table,
|
|
title=title,
|
|
border_style="scope.border",
|
|
padding=(0, 1),
|
|
)
|
|
|
|
|
|
if __name__ == "__main__": # pragma: no cover
|
|
from pip._vendor.rich import print
|
|
|
|
print()
|
|
|
|
def test(foo: float, bar: float) -> None:
|
|
list_of_things = [1, 2, 3, None, 4, True, False, "Hello World"]
|
|
dict_of_things = {
|
|
"version": "1.1",
|
|
"method": "confirmFruitPurchase",
|
|
"params": [["apple", "orange", "mangoes", "pomelo"], 1.123],
|
|
"id": "194521489",
|
|
}
|
|
print(render_scope(locals(), title="[i]locals", sort_keys=False))
|
|
|
|
test(20.3423, 3.1427)
|
|
print()
|