/
opt
/
support
/
venv
/
lib
/
python3.13
/
site-packages
/
pip
/
_vendor
/
rich
/
/opt/support/venv/lib/python3.13/site-packages/pip/_vendor/rich
mkdir
upload
Name
Size
Mode
Actions
__pycache__/
-
0755
rm
abc.py
890
0755
edit
dl
rm
align.py
10324
0755
edit
dl
rm
ansi.py
6921
0755
edit
dl
rm
bar.py
3263
0755
edit
dl
rm
box.py
10686
0755
edit
dl
rm
cells.py
5130
0755
edit
dl
rm
color.py
18211
0755
edit
dl
rm
color_triplet.py
1054
0755
edit
dl
rm
columns.py
7131
0755
edit
dl
rm
console.py
100849
0755
edit
dl
rm
constrain.py
1288
0755
edit
dl
rm
containers.py
5502
0755
edit
dl
rm
control.py
6487
0755
edit
dl
rm
default_styles.py
8257
0755
edit
dl
rm
diagnose.py
1025
0755
edit
dl
rm
emoji.py
2367
0755
edit
dl
rm
errors.py
642
0755
edit
dl
rm
filesize.py
2484
0755
edit
dl
rm
file_proxy.py
1683
0755
edit
dl
rm
highlighter.py
9586
0755
edit
dl
rm
json.py
5031
0755
edit
dl
rm
jupyter.py
3252
0755
edit
dl
rm
layout.py
14004
0755
edit
dl
rm
LICENSE
1056
0755
edit
dl
rm
live.py
15180
0755
edit
dl
rm
live_render.py
3521
0755
edit
dl
rm
logging.py
12468
0755
edit
dl
rm
markup.py
8451
0755
edit
dl
rm
measure.py
5305
0755
edit
dl
rm
padding.py
4908
0755
edit
dl
rm
pager.py
828
0755
edit
dl
rm
palette.py
3396
0755
edit
dl
rm
panel.py
11157
0755
edit
dl
rm
pretty.py
36391
0755
edit
dl
rm
progress.py
60408
0755
edit
dl
rm
progress_bar.py
8162
0755
edit
dl
rm
prompt.py
12447
0755
edit
dl
rm
protocol.py
1391
0755
edit
dl
rm
py.typed
0
0755
edit
dl
rm
region.py
166
0755
edit
dl
rm
repr.py
4431
0755
edit
dl
rm
rule.py
4602
0755
edit
dl
rm
scope.py
2843
0755
edit
dl
rm
screen.py
1591
0755
edit
dl
rm
segment.py
24743
0755
edit
dl
rm
spinner.py
4214
0755
edit
dl
rm
status.py
4424
0755
edit
dl
rm
style.py
26990
0755
edit
dl
rm
styled.py
1258
0755
edit
dl
rm
syntax.py
36371
0755
edit
dl
rm
table.py
40049
0755
edit
dl
rm
terminal_theme.py
3370
0755
edit
dl
rm
text.py
47552
0755
edit
dl
rm
theme.py
3771
0755
edit
dl
rm
themes.py
102
0755
edit
dl
rm
traceback.py
35861
0755
edit
dl
rm
tree.py
9451
0755
edit
dl
rm
_cell_widths.py
10209
0755
edit
dl
rm
_emoji_codes.py
140235
0755
edit
dl
rm
_emoji_replace.py
1064
0755
edit
dl
rm
_export_format.py
2128
0755
edit
dl
rm
_extension.py
265
0755
edit
dl
rm
_fileno.py
799
0755
edit
dl
rm
_inspect.py
9656
0755
edit
dl
rm
_log_render.py
3225
0755
edit
dl
rm
_loop.py
1236
0755
edit
dl
rm
_null_file.py
1394
0755
edit
dl
rm
_palettes.py
7063
0755
edit
dl
rm
_pick.py
423
0755
edit
dl
rm
_ratio.py
5325
0755
edit
dl
rm
_spinners.py
19919
0755
edit
dl
rm
_stack.py
351
0755
edit
dl
rm
_timer.py
417
0755
edit
dl
rm
_win32_console.py
22755
0755
edit
dl
rm
_windows.py
1925
0755
edit
dl
rm
_windows_renderer.py
2783
0755
edit
dl
rm
_wrap.py
3404
0755
edit
dl
rm
__init__.py
6090
0755
edit
dl
rm
__main__.py
7896
0755
edit
dl
rm
Edit:
/opt/support/venv/lib/python3.13/site-packages/pip/_vendor/rich/box.py
(10686B)
from typing import TYPE_CHECKING, Iterable, List, Literal from ._loop import loop_last if TYPE_CHECKING: from pip._vendor.rich.console import ConsoleOptions class Box: """Defines characters to render boxes. ┌─┬┐ top │ ││ head ├─┼┤ head_row │ ││ mid ├─┼┤ row ├─┼┤ foot_row │ ││ foot └─┴┘ bottom Args: box (str): Characters making up box. ascii (bool, optional): True if this box uses ascii characters only. Default is False. """ def __init__(self, box: str, *, ascii: bool = False) -> None: self._box = box self.ascii = ascii line1, line2, line3, line4, line5, line6, line7, line8 = box.splitlines() # top self.top_left, self.top, self.top_divider, self.top_right = iter(line1) # head self.head_left, _, self.head_vertical, self.head_right = iter(line2) # head_row ( self.head_row_left, self.head_row_horizontal, self.head_row_cross, self.head_row_right, ) = iter(line3) # mid self.mid_left, _, self.mid_vertical, self.mid_right = iter(line4) # row self.row_left, self.row_horizontal, self.row_cross, self.row_right = iter(line5) # foot_row ( self.foot_row_left, self.foot_row_horizontal, self.foot_row_cross, self.foot_row_right, ) = iter(line6) # foot self.foot_left, _, self.foot_vertical, self.foot_right = iter(line7) # bottom self.bottom_left, self.bottom, self.bottom_divider, self.bottom_right = iter( line8 ) def __repr__(self) -> str: return "Box(...)" def __str__(self) -> str: return self._box def substitute(self, options: "ConsoleOptions", safe: bool = True) -> "Box": """Substitute this box for another if it won't render due to platform issues. Args: options (ConsoleOptions): Console options used in rendering. safe (bool, optional): Substitute this for another Box if there are known problems displaying on the platform (currently only relevant on Windows). Default is True. Returns: Box: A different Box or the same Box. """ box = self if options.legacy_windows and safe: box = LEGACY_WINDOWS_SUBSTITUTIONS.get(box, box) if options.ascii_only and not box.ascii: box = ASCII return box def get_plain_headed_box(self) -> "Box": """If this box uses special characters for the borders of the header, then return the equivalent box that does not. Returns: Box: The most similar Box that doesn't use header-specific box characters. If the current Box already satisfies this criterion, then it's returned. """ return PLAIN_HEADED_SUBSTITUTIONS.get(self, self) def get_top(self, widths: Iterable[int]) -> str: """Get the top of a simple box. Args: widths (List[int]): Widths of columns. Returns: str: A string of box characters. """ parts: List[str] = [] append = parts.append append(self.top_left) for last, width in loop_last(widths): append(self.top * width) if not last: append(self.top_divider) append(self.top_right) return "".join(parts) def get_row( self, widths: Iterable[int], level: Literal["head", "row", "foot", "mid"] = "row", edge: bool = True, ) -> str: """Get the top of a simple box. Args: width (List[int]): Widths of columns. Returns: str: A string of box characters. """ if level == "head": left = self.head_row_left horizontal = self.head_row_horizontal cross = self.head_row_cross right = self.head_row_right elif level == "row": left = self.row_left horizontal = self.row_horizontal cross = self.row_cross right = self.row_right elif level == "mid": left = self.mid_left horizontal = " " cross = self.mid_vertical right = self.mid_right elif level == "foot": left = self.foot_row_left horizontal = self.foot_row_horizontal cross = self.foot_row_cross right = self.foot_row_right else: raise ValueError("level must be 'head', 'row' or 'foot'") parts: List[str] = [] append = parts.append if edge: append(left) for last, width in loop_last(widths): append(horizontal * width) if not last: append(cross) if edge: append(right) return "".join(parts) def get_bottom(self, widths: Iterable[int]) -> str: """Get the bottom of a simple box. Args: widths (List[int]): Widths of columns. Returns: str: A string of box characters. """ parts: List[str] = [] append = parts.append append(self.bottom_left) for last, width in loop_last(widths): append(self.bottom * width) if not last: append(self.bottom_divider) append(self.bottom_right) return "".join(parts) # fmt: off ASCII: Box = Box( "+--+\n" "| ||\n" "|-+|\n" "| ||\n" "|-+|\n" "|-+|\n" "| ||\n" "+--+\n", ascii=True, ) ASCII2: Box = Box( "+-++\n" "| ||\n" "+-++\n" "| ||\n" "+-++\n" "+-++\n" "| ||\n" "+-++\n", ascii=True, ) ASCII_DOUBLE_HEAD: Box = Box( "+-++\n" "| ||\n" "+=++\n" "| ||\n" "+-++\n" "+-++\n" "| ||\n" "+-++\n", ascii=True, ) SQUARE: Box = Box( "┌─┬┐\n" "│ ││\n" "├─┼┤\n" "│ ││\n" "├─┼┤\n" "├─┼┤\n" "│ ││\n" "└─┴┘\n" ) SQUARE_DOUBLE_HEAD: Box = Box( "┌─┬┐\n" "│ ││\n" "╞═╪╡\n" "│ ││\n" "├─┼┤\n" "├─┼┤\n" "│ ││\n" "└─┴┘\n" ) MINIMAL: Box = Box( " ╷ \n" " │ \n" "╶─┼╴\n" " │ \n" "╶─┼╴\n" "╶─┼╴\n" " │ \n" " ╵ \n" ) MINIMAL_HEAVY_HEAD: Box = Box( " ╷ \n" " │ \n" "╺━┿╸\n" " │ \n" "╶─┼╴\n" "╶─┼╴\n" " │ \n" " ╵ \n" ) MINIMAL_DOUBLE_HEAD: Box = Box( " ╷ \n" " │ \n" " ═╪ \n" " │ \n" " ─┼ \n" " ─┼ \n" " │ \n" " ╵ \n" ) SIMPLE: Box = Box( " \n" " \n" " ── \n" " \n" " \n" " ── \n" " \n" " \n" ) SIMPLE_HEAD: Box = Box( " \n" " \n" " ── \n" " \n" " \n" " \n" " \n" " \n" ) SIMPLE_HEAVY: Box = Box( " \n" " \n" " ━━ \n" " \n" " \n" " ━━ \n" " \n" " \n" ) HORIZONTALS: Box = Box( " ── \n" " \n" " ── \n" " \n" " ── \n" " ── \n" " \n" " ── \n" ) ROUNDED: Box = Box( "╭─┬╮\n" "│ ││\n" "├─┼┤\n" "│ ││\n" "├─┼┤\n" "├─┼┤\n" "│ ││\n" "╰─┴╯\n" ) HEAVY: Box = Box( "┏━┳┓\n" "┃ ┃┃\n" "┣━╋┫\n" "┃ ┃┃\n" "┣━╋┫\n" "┣━╋┫\n" "┃ ┃┃\n" "┗━┻┛\n" ) HEAVY_EDGE: Box = Box( "┏━┯┓\n" "┃ │┃\n" "┠─┼┨\n" "┃ │┃\n" "┠─┼┨\n" "┠─┼┨\n" "┃ │┃\n" "┗━┷┛\n" ) HEAVY_HEAD: Box = Box( "┏━┳┓\n" "┃ ┃┃\n" "┡━╇┩\n" "│ ││\n" "├─┼┤\n" "├─┼┤\n" "│ ││\n" "└─┴┘\n" ) DOUBLE: Box = Box( "╔═╦╗\n" "║ ║║\n" "╠═╬╣\n" "║ ║║\n" "╠═╬╣\n" "╠═╬╣\n" "║ ║║\n" "╚═╩╝\n" ) DOUBLE_EDGE: Box = Box( "╔═╤╗\n" "║ │║\n" "╟─┼╢\n" "║ │║\n" "╟─┼╢\n" "╟─┼╢\n" "║ │║\n" "╚═╧╝\n" ) MARKDOWN: Box = Box( " \n" "| ||\n" "|-||\n" "| ||\n" "|-||\n" "|-||\n" "| ||\n" " \n", ascii=True, ) # fmt: on # Map Boxes that don't render with raster fonts on to equivalent that do LEGACY_WINDOWS_SUBSTITUTIONS = { ROUNDED: SQUARE, MINIMAL_HEAVY_HEAD: MINIMAL, SIMPLE_HEAVY: SIMPLE, HEAVY: SQUARE, HEAVY_EDGE: SQUARE, HEAVY_HEAD: SQUARE, } # Map headed boxes to their headerless equivalents PLAIN_HEADED_SUBSTITUTIONS = { HEAVY_HEAD: SQUARE, SQUARE_DOUBLE_HEAD: SQUARE, MINIMAL_DOUBLE_HEAD: MINIMAL, MINIMAL_HEAVY_HEAD: MINIMAL, ASCII_DOUBLE_HEAD: ASCII2, } if __name__ == "__main__": # pragma: no cover from pip._vendor.rich.columns import Columns from pip._vendor.rich.panel import Panel from . import box as box from .console import Console from .table import Table from .text import Text console = Console(record=True) BOXES = [ "ASCII", "ASCII2", "ASCII_DOUBLE_HEAD", "SQUARE", "SQUARE_DOUBLE_HEAD", "MINIMAL", "MINIMAL_HEAVY_HEAD", "MINIMAL_DOUBLE_HEAD", "SIMPLE", "SIMPLE_HEAD", "SIMPLE_HEAVY", "HORIZONTALS", "ROUNDED", "HEAVY", "HEAVY_EDGE", "HEAVY_HEAD", "DOUBLE", "DOUBLE_EDGE", "MARKDOWN", ] console.print(Panel("[bold green]Box Constants", style="green"), justify="center") console.print() columns = Columns(expand=True, padding=2) for box_name in sorted(BOXES): table = Table( show_footer=True, style="dim", border_style="not dim", expand=True ) table.add_column("Header 1", "Footer 1") table.add_column("Header 2", "Footer 2") table.add_row("Cell", "Cell") table.add_row("Cell", "Cell") table.box = getattr(box, box_name) table.title = Text(f"box.{box_name}", style="magenta") columns.add_renderable(table) console.print(columns) # console.save_svg("box.svg")
Save
cmd:
run