Current Path: > > opt > cloudlinux > venv > lib64 > python3.11 > > site-packages > pip > _vendor > rich
Operation : Linux premium131.web-hosting.com 4.18.0-553.44.1.lve.el8.x86_64 #1 SMP Thu Mar 13 14:29:12 UTC 2025 x86_64 Software : Apache Server IP : 162.0.232.56 | Your IP: 216.73.216.111 Domains : 1034 Domain(s) Permission : [ 0755 ]
Name | Type | Size | Last Modified | Actions |
---|---|---|---|---|
__pycache__ | Directory | - | - | |
__init__.py | File | 6090 bytes | April 17 2025 13:10:58. | |
__main__.py | File | 8477 bytes | April 17 2025 13:10:58. | |
_cell_widths.py | File | 10209 bytes | April 17 2025 13:10:58. | |
_emoji_codes.py | File | 140235 bytes | April 17 2025 13:10:58. | |
_emoji_replace.py | File | 1064 bytes | April 17 2025 13:10:58. | |
_export_format.py | File | 2128 bytes | April 17 2025 13:10:58. | |
_extension.py | File | 265 bytes | April 17 2025 13:10:58. | |
_fileno.py | File | 799 bytes | April 17 2025 13:10:58. | |
_inspect.py | File | 9655 bytes | April 17 2025 13:10:58. | |
_log_render.py | File | 3225 bytes | April 17 2025 13:10:58. | |
_loop.py | File | 1236 bytes | April 17 2025 13:10:58. | |
_null_file.py | File | 1394 bytes | April 17 2025 13:10:58. | |
_palettes.py | File | 7063 bytes | April 17 2025 13:10:58. | |
_pick.py | File | 423 bytes | April 17 2025 13:10:58. | |
_ratio.py | File | 5471 bytes | April 17 2025 13:10:58. | |
_spinners.py | File | 19919 bytes | April 17 2025 13:10:58. | |
_stack.py | File | 351 bytes | April 17 2025 13:10:58. | |
_timer.py | File | 417 bytes | April 17 2025 13:10:58. | |
_win32_console.py | File | 22755 bytes | April 17 2025 13:10:58. | |
_windows.py | File | 1925 bytes | April 17 2025 13:10:58. | |
_windows_renderer.py | File | 2783 bytes | April 17 2025 13:10:58. | |
_wrap.py | File | 3404 bytes | April 17 2025 13:10:58. | |
abc.py | File | 890 bytes | April 17 2025 13:10:58. | |
align.py | File | 10469 bytes | April 17 2025 13:10:58. | |
ansi.py | File | 6921 bytes | April 17 2025 13:10:58. | |
bar.py | File | 3263 bytes | April 17 2025 13:10:58. | |
box.py | File | 10831 bytes | April 17 2025 13:10:58. | |
cells.py | File | 5130 bytes | April 17 2025 13:10:58. | |
color.py | File | 18211 bytes | April 17 2025 13:10:58. | |
color_triplet.py | File | 1054 bytes | April 17 2025 13:10:58. | |
columns.py | File | 7131 bytes | April 17 2025 13:10:58. | |
console.py | File | 100156 bytes | April 17 2025 13:10:58. | |
constrain.py | File | 1288 bytes | April 17 2025 13:10:58. | |
containers.py | File | 5502 bytes | April 17 2025 13:10:58. | |
control.py | File | 6630 bytes | April 17 2025 13:10:58. | |
default_styles.py | File | 8159 bytes | April 17 2025 13:10:58. | |
diagnose.py | File | 972 bytes | April 17 2025 13:10:58. | |
emoji.py | File | 2501 bytes | April 17 2025 13:10:58. | |
errors.py | File | 642 bytes | April 17 2025 13:10:58. | |
file_proxy.py | File | 1683 bytes | April 17 2025 13:10:58. | |
filesize.py | File | 2484 bytes | April 17 2025 13:10:58. | |
highlighter.py | File | 9586 bytes | April 17 2025 13:10:58. | |
json.py | File | 5031 bytes | April 17 2025 13:10:58. | |
jupyter.py | File | 3252 bytes | April 17 2025 13:10:58. | |
layout.py | File | 14004 bytes | April 17 2025 13:10:58. | |
live.py | File | 14270 bytes | April 17 2025 13:10:58. | |
live_render.py | File | 3666 bytes | April 17 2025 13:10:58. | |
logging.py | File | 12458 bytes | April 17 2025 13:10:58. | |
markup.py | File | 8451 bytes | April 17 2025 13:10:58. | |
measure.py | File | 5305 bytes | April 17 2025 13:10:58. | |
padding.py | File | 4908 bytes | April 17 2025 13:10:58. | |
pager.py | File | 828 bytes | April 17 2025 13:10:58. | |
palette.py | File | 3396 bytes | April 17 2025 13:10:58. | |
panel.py | File | 11235 bytes | April 17 2025 13:10:58. | |
pretty.py | File | 36391 bytes | April 17 2025 13:10:58. | |
progress.py | File | 60357 bytes | April 17 2025 13:10:58. | |
progress_bar.py | File | 8162 bytes | April 17 2025 13:10:58. | |
prompt.py | File | 12447 bytes | April 17 2025 13:10:58. | |
protocol.py | File | 1391 bytes | April 17 2025 13:10:58. | |
py.typed | File | 0 bytes | April 17 2025 13:10:58. | |
region.py | File | 166 bytes | April 17 2025 13:10:58. | |
repr.py | File | 4431 bytes | April 17 2025 13:10:58. | |
rule.py | File | 4602 bytes | April 17 2025 13:10:58. | |
scope.py | File | 2843 bytes | April 17 2025 13:10:58. | |
screen.py | File | 1591 bytes | April 17 2025 13:10:58. | |
segment.py | File | 24743 bytes | April 17 2025 13:10:58. | |
spinner.py | File | 4364 bytes | April 17 2025 13:10:58. | |
status.py | File | 4424 bytes | April 17 2025 13:10:58. | |
style.py | File | 27067 bytes | April 17 2025 13:10:58. | |
styled.py | File | 1258 bytes | April 17 2025 13:10:58. | |
syntax.py | File | 35763 bytes | April 17 2025 13:10:58. | |
table.py | File | 40103 bytes | April 17 2025 13:10:58. | |
terminal_theme.py | File | 3370 bytes | April 17 2025 13:10:58. | |
text.py | File | 47552 bytes | April 17 2025 13:10:58. | |
theme.py | File | 3771 bytes | April 17 2025 13:10:58. | |
themes.py | File | 102 bytes | April 17 2025 13:10:58. | |
traceback.py | File | 31797 bytes | April 17 2025 13:10:58. | |
tree.py | File | 9451 bytes | April 17 2025 13:10:58. |
from collections import defaultdict from itertools import chain from operator import itemgetter from typing import Dict, Iterable, List, Optional, Tuple from .align import Align, AlignMethod from .console import Console, ConsoleOptions, RenderableType, RenderResult from .constrain import Constrain from .measure import Measurement from .padding import Padding, PaddingDimensions from .table import Table from .text import TextType from .jupyter import JupyterMixin class Columns(JupyterMixin): """Display renderables in neat columns. Args: renderables (Iterable[RenderableType]): Any number of Rich renderables (including str). width (int, optional): The desired width of the columns, or None to auto detect. Defaults to None. padding (PaddingDimensions, optional): Optional padding around cells. Defaults to (0, 1). expand (bool, optional): Expand columns to full width. Defaults to False. equal (bool, optional): Arrange in to equal sized columns. Defaults to False. column_first (bool, optional): Align items from top to bottom (rather than left to right). Defaults to False. right_to_left (bool, optional): Start column from right hand side. Defaults to False. align (str, optional): Align value ("left", "right", or "center") or None for default. Defaults to None. title (TextType, optional): Optional title for Columns. """ def __init__( self, renderables: Optional[Iterable[RenderableType]] = None, padding: PaddingDimensions = (0, 1), *, width: Optional[int] = None, expand: bool = False, equal: bool = False, column_first: bool = False, right_to_left: bool = False, align: Optional[AlignMethod] = None, title: Optional[TextType] = None, ) -> None: self.renderables = list(renderables or []) self.width = width self.padding = padding self.expand = expand self.equal = equal self.column_first = column_first self.right_to_left = right_to_left self.align: Optional[AlignMethod] = align self.title = title def add_renderable(self, renderable: RenderableType) -> None: """Add a renderable to the columns. Args: renderable (RenderableType): Any renderable object. """ self.renderables.append(renderable) def __rich_console__( self, console: Console, options: ConsoleOptions ) -> RenderResult: render_str = console.render_str renderables = [ render_str(renderable) if isinstance(renderable, str) else renderable for renderable in self.renderables ] if not renderables: return _top, right, _bottom, left = Padding.unpack(self.padding) width_padding = max(left, right) max_width = options.max_width widths: Dict[int, int] = defaultdict(int) column_count = len(renderables) get_measurement = Measurement.get renderable_widths = [ get_measurement(console, options, renderable).maximum for renderable in renderables ] if self.equal: renderable_widths = [max(renderable_widths)] * len(renderable_widths) def iter_renderables( column_count: int, ) -> Iterable[Tuple[int, Optional[RenderableType]]]: item_count = len(renderables) if self.column_first: width_renderables = list(zip(renderable_widths, renderables)) column_lengths: List[int] = [item_count // column_count] * column_count for col_no in range(item_count % column_count): column_lengths[col_no] += 1 row_count = (item_count + column_count - 1) // column_count cells = [[-1] * column_count for _ in range(row_count)] row = col = 0 for index in range(item_count): cells[row][col] = index column_lengths[col] -= 1 if column_lengths[col]: row += 1 else: col += 1 row = 0 for index in chain.from_iterable(cells): if index == -1: break yield width_renderables[index] else: yield from zip(renderable_widths, renderables) # Pad odd elements with spaces if item_count % column_count: for _ in range(column_count - (item_count % column_count)): yield 0, None table = Table.grid(padding=self.padding, collapse_padding=True, pad_edge=False) table.expand = self.expand table.title = self.title if self.width is not None: column_count = (max_width) // (self.width + width_padding) for _ in range(column_count): table.add_column(width=self.width) else: while column_count > 1: widths.clear() column_no = 0 for renderable_width, _ in iter_renderables(column_count): widths[column_no] = max(widths[column_no], renderable_width) total_width = sum(widths.values()) + width_padding * ( len(widths) - 1 ) if total_width > max_width: column_count = len(widths) - 1 break else: column_no = (column_no + 1) % column_count else: break get_renderable = itemgetter(1) _renderables = [ get_renderable(_renderable) for _renderable in iter_renderables(column_count) ] if self.equal: _renderables = [ None if renderable is None else Constrain(renderable, renderable_widths[0]) for renderable in _renderables ] if self.align: align = self.align _Align = Align _renderables = [ None if renderable is None else _Align(renderable, align) for renderable in _renderables ] right_to_left = self.right_to_left add_row = table.add_row for start in range(0, len(_renderables), column_count): row = _renderables[start : start + column_count] if right_to_left: row = row[::-1] add_row(*row) yield table if __name__ == "__main__": # pragma: no cover import os console = Console() files = [f"{i} {s}" for i, s in enumerate(sorted(os.listdir()))] columns = Columns(files, padding=(0, 1), expand=False, equal=False) console.print(columns) console.rule() columns.column_first = True console.print(columns) columns.right_to_left = True console.rule() console.print(columns)
SILENT KILLER Tool