1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
| 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()
|
|