]>
Commit | Line | Data |
---|---|---|
e0df8241 JR |
1 | """Rich text and beautiful formatting in the terminal.""" |
2 | ||
3 | import os | |
4 | from typing import IO, TYPE_CHECKING, Any, Callable, Optional, Union | |
5 | ||
6 | from ._extension import load_ipython_extension # noqa: F401 | |
7 | ||
8 | __all__ = ["get_console", "reconfigure", "print", "inspect", "print_json"] | |
9 | ||
10 | if TYPE_CHECKING: | |
11 | from .console import Console | |
12 | ||
13 | # Global console used by alternative print | |
14 | _console: Optional["Console"] = None | |
15 | ||
16 | try: | |
17 | _IMPORT_CWD = os.path.abspath(os.getcwd()) | |
18 | except FileNotFoundError: | |
19 | # Can happen if the cwd has been deleted | |
20 | _IMPORT_CWD = "" | |
21 | ||
22 | ||
23 | def get_console() -> "Console": | |
24 | """Get a global :class:`~rich.console.Console` instance. This function is used when Rich requires a Console, | |
25 | and hasn't been explicitly given one. | |
26 | ||
27 | Returns: | |
28 | Console: A console instance. | |
29 | """ | |
30 | global _console | |
31 | if _console is None: | |
32 | from .console import Console | |
33 | ||
34 | _console = Console() | |
35 | ||
36 | return _console | |
37 | ||
38 | ||
39 | def reconfigure(*args: Any, **kwargs: Any) -> None: | |
40 | """Reconfigures the global console by replacing it with another. | |
41 | ||
42 | Args: | |
43 | *args (Any): Positional arguments for the replacement :class:`~rich.console.Console`. | |
44 | **kwargs (Any): Keyword arguments for the replacement :class:`~rich.console.Console`. | |
45 | """ | |
46 | from pip._vendor.rich.console import Console | |
47 | ||
48 | new_console = Console(*args, **kwargs) | |
49 | _console = get_console() | |
50 | _console.__dict__ = new_console.__dict__ | |
51 | ||
52 | ||
53 | def print( | |
54 | *objects: Any, | |
55 | sep: str = " ", | |
56 | end: str = "\n", | |
57 | file: Optional[IO[str]] = None, | |
58 | flush: bool = False, | |
59 | ) -> None: | |
60 | r"""Print object(s) supplied via positional arguments. | |
61 | This function has an identical signature to the built-in print. | |
62 | For more advanced features, see the :class:`~rich.console.Console` class. | |
63 | ||
64 | Args: | |
65 | sep (str, optional): Separator between printed objects. Defaults to " ". | |
66 | end (str, optional): Character to write at end of output. Defaults to "\\n". | |
67 | file (IO[str], optional): File to write to, or None for stdout. Defaults to None. | |
68 | flush (bool, optional): Has no effect as Rich always flushes output. Defaults to False. | |
69 | ||
70 | """ | |
71 | from .console import Console | |
72 | ||
73 | write_console = get_console() if file is None else Console(file=file) | |
74 | return write_console.print(*objects, sep=sep, end=end) | |
75 | ||
76 | ||
77 | def print_json( | |
78 | json: Optional[str] = None, | |
79 | *, | |
80 | data: Any = None, | |
81 | indent: Union[None, int, str] = 2, | |
82 | highlight: bool = True, | |
83 | skip_keys: bool = False, | |
84 | ensure_ascii: bool = False, | |
85 | check_circular: bool = True, | |
86 | allow_nan: bool = True, | |
87 | default: Optional[Callable[[Any], Any]] = None, | |
88 | sort_keys: bool = False, | |
89 | ) -> None: | |
90 | """Pretty prints JSON. Output will be valid JSON. | |
91 | ||
92 | Args: | |
93 | json (str): A string containing JSON. | |
94 | data (Any): If json is not supplied, then encode this data. | |
95 | indent (int, optional): Number of spaces to indent. Defaults to 2. | |
96 | highlight (bool, optional): Enable highlighting of output: Defaults to True. | |
97 | skip_keys (bool, optional): Skip keys not of a basic type. Defaults to False. | |
98 | ensure_ascii (bool, optional): Escape all non-ascii characters. Defaults to False. | |
99 | check_circular (bool, optional): Check for circular references. Defaults to True. | |
100 | allow_nan (bool, optional): Allow NaN and Infinity values. Defaults to True. | |
101 | default (Callable, optional): A callable that converts values that can not be encoded | |
102 | in to something that can be JSON encoded. Defaults to None. | |
103 | sort_keys (bool, optional): Sort dictionary keys. Defaults to False. | |
104 | """ | |
105 | ||
106 | get_console().print_json( | |
107 | json, | |
108 | data=data, | |
109 | indent=indent, | |
110 | highlight=highlight, | |
111 | skip_keys=skip_keys, | |
112 | ensure_ascii=ensure_ascii, | |
113 | check_circular=check_circular, | |
114 | allow_nan=allow_nan, | |
115 | default=default, | |
116 | sort_keys=sort_keys, | |
117 | ) | |
118 | ||
119 | ||
120 | def inspect( | |
121 | obj: Any, | |
122 | *, | |
123 | console: Optional["Console"] = None, | |
124 | title: Optional[str] = None, | |
125 | help: bool = False, | |
126 | methods: bool = False, | |
127 | docs: bool = True, | |
128 | private: bool = False, | |
129 | dunder: bool = False, | |
130 | sort: bool = True, | |
131 | all: bool = False, | |
132 | value: bool = True, | |
133 | ) -> None: | |
134 | """Inspect any Python object. | |
135 | ||
136 | * inspect(<OBJECT>) to see summarized info. | |
137 | * inspect(<OBJECT>, methods=True) to see methods. | |
138 | * inspect(<OBJECT>, help=True) to see full (non-abbreviated) help. | |
139 | * inspect(<OBJECT>, private=True) to see private attributes (single underscore). | |
140 | * inspect(<OBJECT>, dunder=True) to see attributes beginning with double underscore. | |
141 | * inspect(<OBJECT>, all=True) to see all attributes. | |
142 | ||
143 | Args: | |
144 | obj (Any): An object to inspect. | |
145 | title (str, optional): Title to display over inspect result, or None use type. Defaults to None. | |
146 | help (bool, optional): Show full help text rather than just first paragraph. Defaults to False. | |
147 | methods (bool, optional): Enable inspection of callables. Defaults to False. | |
148 | docs (bool, optional): Also render doc strings. Defaults to True. | |
149 | private (bool, optional): Show private attributes (beginning with underscore). Defaults to False. | |
150 | dunder (bool, optional): Show attributes starting with double underscore. Defaults to False. | |
151 | sort (bool, optional): Sort attributes alphabetically. Defaults to True. | |
152 | all (bool, optional): Show all attributes. Defaults to False. | |
153 | value (bool, optional): Pretty print value. Defaults to True. | |
154 | """ | |
155 | _console = console or get_console() | |
156 | from pip._vendor.rich._inspect import Inspect | |
157 | ||
158 | # Special case for inspect(inspect) | |
159 | is_inspect = obj is inspect | |
160 | ||
161 | _inspect = Inspect( | |
162 | obj, | |
163 | title=title, | |
164 | help=is_inspect or help, | |
165 | methods=is_inspect or methods, | |
166 | docs=is_inspect or docs, | |
167 | private=private, | |
168 | dunder=dunder, | |
169 | sort=sort, | |
170 | all=all, | |
171 | value=value, | |
172 | ) | |
173 | _console.print(_inspect) | |
174 | ||
175 | ||
176 | if __name__ == "__main__": # pragma: no cover | |
177 | print("Hello, **World**") |