X7ROOT File Manager
Current Path:
/opt/hc_python/lib/python3.12/site-packages/pip/_vendor/rich
opt
/
hc_python
/
lib
/
python3.12
/
site-packages
/
pip
/
_vendor
/
rich
/
??
..
??
LICENSE
(1.03 KB)
??
__init__.py
(5.95 KB)
??
__main__.py
(7.71 KB)
??
__pycache__
??
_cell_widths.py
(9.97 KB)
??
_emoji_codes.py
(136.95 KB)
??
_emoji_replace.py
(1.04 KB)
??
_export_format.py
(2.08 KB)
??
_extension.py
(265 B)
??
_fileno.py
(799 B)
??
_inspect.py
(9.43 KB)
??
_log_render.py
(3.15 KB)
??
_loop.py
(1.21 KB)
??
_null_file.py
(1.36 KB)
??
_palettes.py
(6.9 KB)
??
_pick.py
(423 B)
??
_ratio.py
(5.2 KB)
??
_spinners.py
(19.45 KB)
??
_stack.py
(351 B)
??
_timer.py
(417 B)
??
_win32_console.py
(22.22 KB)
??
_windows.py
(1.88 KB)
??
_windows_renderer.py
(2.72 KB)
??
_wrap.py
(3.32 KB)
??
abc.py
(890 B)
??
align.py
(10.08 KB)
??
ansi.py
(6.76 KB)
??
bar.py
(3.19 KB)
??
box.py
(10.44 KB)
??
cells.py
(5.01 KB)
??
color.py
(17.78 KB)
??
color_triplet.py
(1.03 KB)
??
columns.py
(6.96 KB)
??
console.py
(98.49 KB)
??
constrain.py
(1.26 KB)
??
containers.py
(5.37 KB)
??
control.py
(6.33 KB)
??
default_styles.py
(8.06 KB)
??
diagnose.py
(1 KB)
??
emoji.py
(2.31 KB)
??
errors.py
(642 B)
??
file_proxy.py
(1.64 KB)
??
filesize.py
(2.43 KB)
??
highlighter.py
(9.36 KB)
??
json.py
(4.91 KB)
??
jupyter.py
(3.18 KB)
??
layout.py
(13.68 KB)
??
live.py
(14.82 KB)
??
live_render.py
(3.44 KB)
??
logging.py
(12.18 KB)
??
markup.py
(8.25 KB)
??
measure.py
(5.18 KB)
??
padding.py
(4.79 KB)
??
pager.py
(828 B)
??
palette.py
(3.32 KB)
??
panel.py
(10.9 KB)
??
pretty.py
(35.54 KB)
??
progress.py
(58.99 KB)
??
progress_bar.py
(7.97 KB)
??
prompt.py
(12.16 KB)
??
protocol.py
(1.36 KB)
??
py.typed
(0 B)
??
region.py
(166 B)
??
repr.py
(4.33 KB)
??
rule.py
(4.49 KB)
??
scope.py
(2.78 KB)
??
screen.py
(1.55 KB)
??
segment.py
(24.16 KB)
??
spinner.py
(4.12 KB)
??
status.py
(4.32 KB)
??
style.py
(26.36 KB)
??
styled.py
(1.23 KB)
??
syntax.py
(35.52 KB)
??
table.py
(39.11 KB)
??
terminal_theme.py
(3.29 KB)
??
text.py
(46.44 KB)
??
theme.py
(3.68 KB)
??
themes.py
(102 B)
??
traceback.py
(35.02 KB)
??
tree.py
(9.23 KB)
Editing: repr.py
import inspect from functools import partial from typing import ( Any, Callable, Iterable, List, Optional, Tuple, Type, TypeVar, Union, overload, ) T = TypeVar("T") Result = Iterable[Union[Any, Tuple[Any], Tuple[str, Any], Tuple[str, Any, Any]]] RichReprResult = Result class ReprError(Exception): """An error occurred when attempting to build a repr.""" @overload def auto(cls: Optional[Type[T]]) -> Type[T]: ... @overload def auto(*, angular: bool = False) -> Callable[[Type[T]], Type[T]]: ... def auto( cls: Optional[Type[T]] = None, *, angular: Optional[bool] = None ) -> Union[Type[T], Callable[[Type[T]], Type[T]]]: """Class decorator to create __repr__ from __rich_repr__""" def do_replace(cls: Type[T], angular: Optional[bool] = None) -> Type[T]: def auto_repr(self: T) -> str: """Create repr string from __rich_repr__""" repr_str: List[str] = [] append = repr_str.append angular: bool = getattr(self.__rich_repr__, "angular", False) # type: ignore[attr-defined] for arg in self.__rich_repr__(): # type: ignore[attr-defined] if isinstance(arg, tuple): if len(arg) == 1: append(repr(arg[0])) else: key, value, *default = arg if key is None: append(repr(value)) else: if default and default[0] == value: continue append(f"{key}={value!r}") else: append(repr(arg)) if angular: return f"<{self.__class__.__name__} {' '.join(repr_str)}>" else: return f"{self.__class__.__name__}({', '.join(repr_str)})" def auto_rich_repr(self: Type[T]) -> Result: """Auto generate __rich_rep__ from signature of __init__""" try: signature = inspect.signature(self.__init__) for name, param in signature.parameters.items(): if param.kind == param.POSITIONAL_ONLY: yield getattr(self, name) elif param.kind in ( param.POSITIONAL_OR_KEYWORD, param.KEYWORD_ONLY, ): if param.default is param.empty: yield getattr(self, param.name) else: yield param.name, getattr(self, param.name), param.default except Exception as error: raise ReprError( f"Failed to auto generate __rich_repr__; {error}" ) from None if not hasattr(cls, "__rich_repr__"): auto_rich_repr.__doc__ = "Build a rich repr" cls.__rich_repr__ = auto_rich_repr # type: ignore[attr-defined] auto_repr.__doc__ = "Return repr(self)" cls.__repr__ = auto_repr # type: ignore[assignment] if angular is not None: cls.__rich_repr__.angular = angular # type: ignore[attr-defined] return cls if cls is None: return partial(do_replace, angular=angular) else: return do_replace(cls, angular=angular) @overload def rich_repr(cls: Optional[Type[T]]) -> Type[T]: ... @overload def rich_repr(*, angular: bool = False) -> Callable[[Type[T]], Type[T]]: ... def rich_repr( cls: Optional[Type[T]] = None, *, angular: bool = False ) -> Union[Type[T], Callable[[Type[T]], Type[T]]]: if cls is None: return auto(angular=angular) else: return auto(cls) if __name__ == "__main__": @auto class Foo: def __rich_repr__(self) -> Result: yield "foo" yield "bar", {"shopping": ["eggs", "ham", "pineapple"]} yield "buy", "hand sanitizer" foo = Foo() from pip._vendor.rich.console import Console console = Console() console.rule("Standard repr") console.print(foo) console.print(foo, width=60) console.print(foo, width=30) console.rule("Angular repr") Foo.__rich_repr__.angular = True # type: ignore[attr-defined] console.print(foo) console.print(foo, width=60) console.print(foo, width=30)
Upload File
Create Folder