SILENT KILLERPanel

Current Path: > > opt > alt > python38 > lib > > python3.8 > 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 ]

Files and Folders in: //opt/alt/python38/lib//python3.8/site-packages/pip/_vendor/rich

NameTypeSizeLast ModifiedActions
__pycache__ Directory - -
__init__.py File 5944 bytes November 13 2023 21:40:26.
__main__.py File 8808 bytes November 13 2023 21:40:26.
_cell_widths.py File 10096 bytes November 13 2023 21:40:26.
_emoji_codes.py File 140235 bytes November 13 2023 21:40:26.
_emoji_replace.py File 1064 bytes November 13 2023 21:40:26.
_export_format.py File 2114 bytes November 13 2023 21:40:26.
_extension.py File 265 bytes November 13 2023 21:40:26.
_inspect.py File 9695 bytes November 13 2023 21:40:26.
_log_render.py File 3225 bytes November 13 2023 21:40:26.
_loop.py File 1236 bytes November 13 2023 21:40:26.
_palettes.py File 7063 bytes November 13 2023 21:40:26.
_pick.py File 423 bytes November 13 2023 21:40:26.
_ratio.py File 5472 bytes November 13 2023 21:40:26.
_spinners.py File 19919 bytes November 13 2023 21:40:26.
_stack.py File 351 bytes November 13 2023 21:40:26.
_timer.py File 417 bytes November 13 2023 21:40:26.
_win32_console.py File 22820 bytes November 13 2023 21:40:26.
_windows.py File 1926 bytes November 13 2023 21:40:26.
_windows_renderer.py File 2783 bytes November 13 2023 21:40:26.
_wrap.py File 1840 bytes November 13 2023 21:40:26.
abc.py File 890 bytes November 13 2023 21:40:26.
align.py File 10368 bytes November 13 2023 21:40:26.
ansi.py File 6820 bytes November 13 2023 21:40:26.
bar.py File 3264 bytes November 13 2023 21:40:26.
box.py File 9864 bytes November 13 2023 21:40:26.
cells.py File 4503 bytes November 13 2023 21:40:26.
color.py File 17957 bytes November 13 2023 21:40:26.
color_triplet.py File 1054 bytes November 13 2023 21:40:26.
columns.py File 7131 bytes November 13 2023 21:40:26.
console.py File 95885 bytes November 13 2023 21:40:26.
constrain.py File 1288 bytes November 13 2023 21:40:26.
containers.py File 5497 bytes November 13 2023 21:40:26.
control.py File 6630 bytes November 13 2023 21:40:26.
default_styles.py File 7954 bytes November 13 2023 21:40:26.
diagnose.py File 972 bytes November 13 2023 21:40:26.
emoji.py File 2501 bytes November 13 2023 21:40:26.
errors.py File 642 bytes November 13 2023 21:40:26.
file_proxy.py File 1616 bytes November 13 2023 21:40:26.
filesize.py File 2507 bytes November 13 2023 21:40:26.
highlighter.py File 9585 bytes November 13 2023 21:40:26.
json.py File 5051 bytes November 13 2023 21:40:26.
jupyter.py File 3252 bytes November 13 2023 21:40:26.
layout.py File 14074 bytes November 13 2023 21:40:26.
live.py File 14172 bytes November 13 2023 21:40:26.
live_render.py File 3667 bytes November 13 2023 21:40:26.
logging.py File 11471 bytes November 13 2023 21:40:26.
markup.py File 8198 bytes November 13 2023 21:40:26.
measure.py File 5305 bytes November 13 2023 21:40:26.
padding.py File 4970 bytes November 13 2023 21:40:26.
pager.py File 828 bytes November 13 2023 21:40:26.
palette.py File 3396 bytes November 13 2023 21:40:26.
panel.py File 8744 bytes November 13 2023 21:40:26.
pretty.py File 36576 bytes November 13 2023 21:40:26.
progress.py File 59746 bytes November 13 2023 21:40:26.
progress_bar.py File 8161 bytes November 13 2023 21:40:26.
prompt.py File 11303 bytes November 13 2023 21:40:26.
protocol.py File 1391 bytes November 13 2023 21:40:26.
region.py File 166 bytes November 13 2023 21:40:26.
repr.py File 4449 bytes November 13 2023 21:40:26.
rule.py File 4773 bytes November 13 2023 21:40:26.
scope.py File 2842 bytes November 13 2023 21:40:26.
screen.py File 1591 bytes November 13 2023 21:40:26.
segment.py File 24224 bytes November 13 2023 21:40:26.
spinner.py File 4374 bytes November 13 2023 21:40:26.
status.py File 4425 bytes November 13 2023 21:40:26.
style.py File 26240 bytes November 13 2023 21:40:26.
styled.py File 1258 bytes November 13 2023 21:40:26.
syntax.py File 34697 bytes November 13 2023 21:40:26.
table.py File 39515 bytes November 13 2023 21:40:26.
terminal_theme.py File 3370 bytes November 13 2023 21:40:26.
text.py File 44666 bytes November 13 2023 21:40:26.
theme.py File 3627 bytes November 13 2023 21:40:26.
themes.py File 102 bytes November 13 2023 21:40:26.
traceback.py File 26060 bytes November 13 2023 21:40:26.
tree.py File 9169 bytes November 13 2023 21:40:26.

Reading File: //opt/alt/python38/lib//python3.8/site-packages/pip/_vendor/rich/panel.py

from typing import TYPE_CHECKING, Optional

from .align import AlignMethod
from .box import ROUNDED, Box
from .jupyter import JupyterMixin
from .measure import Measurement, measure_renderables
from .padding import Padding, PaddingDimensions
from .segment import Segment
from .style import StyleType
from .text import Text, TextType

if TYPE_CHECKING:
    from .console import Console, ConsoleOptions, RenderableType, RenderResult


class Panel(JupyterMixin):
    """A console renderable that draws a border around its contents.

    Example:
        >>> console.print(Panel("Hello, World!"))

    Args:
        renderable (RenderableType): A console renderable object.
        box (Box, optional): A Box instance that defines the look of the border (see :ref:`appendix_box`.
            Defaults to box.ROUNDED.
        safe_box (bool, optional): Disable box characters that don't display on windows legacy terminal with *raster* fonts. Defaults to True.
        expand (bool, optional): If True the panel will stretch to fill the console
            width, otherwise it will be sized to fit the contents. Defaults to True.
        style (str, optional): The style of the panel (border and contents). Defaults to "none".
        border_style (str, optional): The style of the border. Defaults to "none".
        width (Optional[int], optional): Optional width of panel. Defaults to None to auto-detect.
        height (Optional[int], optional): Optional height of panel. Defaults to None to auto-detect.
        padding (Optional[PaddingDimensions]): Optional padding around renderable. Defaults to 0.
        highlight (bool, optional): Enable automatic highlighting of panel title (if str). Defaults to False.
    """

    def __init__(
        self,
        renderable: "RenderableType",
        box: Box = ROUNDED,
        *,
        title: Optional[TextType] = None,
        title_align: AlignMethod = "center",
        subtitle: Optional[TextType] = None,
        subtitle_align: AlignMethod = "center",
        safe_box: Optional[bool] = None,
        expand: bool = True,
        style: StyleType = "none",
        border_style: StyleType = "none",
        width: Optional[int] = None,
        height: Optional[int] = None,
        padding: PaddingDimensions = (0, 1),
        highlight: bool = False,
    ) -> None:
        self.renderable = renderable
        self.box = box
        self.title = title
        self.title_align: AlignMethod = title_align
        self.subtitle = subtitle
        self.subtitle_align = subtitle_align
        self.safe_box = safe_box
        self.expand = expand
        self.style = style
        self.border_style = border_style
        self.width = width
        self.height = height
        self.padding = padding
        self.highlight = highlight

    @classmethod
    def fit(
        cls,
        renderable: "RenderableType",
        box: Box = ROUNDED,
        *,
        title: Optional[TextType] = None,
        title_align: AlignMethod = "center",
        subtitle: Optional[TextType] = None,
        subtitle_align: AlignMethod = "center",
        safe_box: Optional[bool] = None,
        style: StyleType = "none",
        border_style: StyleType = "none",
        width: Optional[int] = None,
        padding: PaddingDimensions = (0, 1),
    ) -> "Panel":
        """An alternative constructor that sets expand=False."""
        return cls(
            renderable,
            box,
            title=title,
            title_align=title_align,
            subtitle=subtitle,
            subtitle_align=subtitle_align,
            safe_box=safe_box,
            style=style,
            border_style=border_style,
            width=width,
            padding=padding,
            expand=False,
        )

    @property
    def _title(self) -> Optional[Text]:
        if self.title:
            title_text = (
                Text.from_markup(self.title)
                if isinstance(self.title, str)
                else self.title.copy()
            )
            title_text.end = ""
            title_text.plain = title_text.plain.replace("\n", " ")
            title_text.no_wrap = True
            title_text.expand_tabs()
            title_text.pad(1)
            return title_text
        return None

    @property
    def _subtitle(self) -> Optional[Text]:
        if self.subtitle:
            subtitle_text = (
                Text.from_markup(self.subtitle)
                if isinstance(self.subtitle, str)
                else self.subtitle.copy()
            )
            subtitle_text.end = ""
            subtitle_text.plain = subtitle_text.plain.replace("\n", " ")
            subtitle_text.no_wrap = True
            subtitle_text.expand_tabs()
            subtitle_text.pad(1)
            return subtitle_text
        return None

    def __rich_console__(
        self, console: "Console", options: "ConsoleOptions"
    ) -> "RenderResult":
        _padding = Padding.unpack(self.padding)
        renderable = (
            Padding(self.renderable, _padding) if any(_padding) else self.renderable
        )
        style = console.get_style(self.style)
        border_style = style + console.get_style(self.border_style)
        width = (
            options.max_width
            if self.width is None
            else min(options.max_width, self.width)
        )

        safe_box: bool = console.safe_box if self.safe_box is None else self.safe_box
        box = self.box.substitute(options, safe=safe_box)

        title_text = self._title
        if title_text is not None:
            title_text.style = border_style

        child_width = (
            width - 2
            if self.expand
            else console.measure(
                renderable, options=options.update_width(width - 2)
            ).maximum
        )
        child_height = self.height or options.height or None
        if child_height:
            child_height -= 2
        if title_text is not None:
            child_width = min(
                options.max_width - 2, max(child_width, title_text.cell_len + 2)
            )

        width = child_width + 2
        child_options = options.update(
            width=child_width, height=child_height, highlight=self.highlight
        )
        lines = console.render_lines(renderable, child_options, style=style)

        line_start = Segment(box.mid_left, border_style)
        line_end = Segment(f"{box.mid_right}", border_style)
        new_line = Segment.line()
        if title_text is None or width <= 4:
            yield Segment(box.get_top([width - 2]), border_style)
        else:
            title_text.align(self.title_align, width - 4, character=box.top)
            yield Segment(box.top_left + box.top, border_style)
            yield from console.render(title_text, child_options.update_width(width - 4))
            yield Segment(box.top + box.top_right, border_style)

        yield new_line
        for line in lines:
            yield line_start
            yield from line
            yield line_end
            yield new_line

        subtitle_text = self._subtitle
        if subtitle_text is not None:
            subtitle_text.style = border_style

        if subtitle_text is None or width <= 4:
            yield Segment(box.get_bottom([width - 2]), border_style)
        else:
            subtitle_text.align(self.subtitle_align, width - 4, character=box.bottom)
            yield Segment(box.bottom_left + box.bottom, border_style)
            yield from console.render(
                subtitle_text, child_options.update_width(width - 4)
            )
            yield Segment(box.bottom + box.bottom_right, border_style)

        yield new_line

    def __rich_measure__(
        self, console: "Console", options: "ConsoleOptions"
    ) -> "Measurement":
        _title = self._title
        _, right, _, left = Padding.unpack(self.padding)
        padding = left + right
        renderables = [self.renderable, _title] if _title else [self.renderable]

        if self.width is None:
            width = (
                measure_renderables(
                    console,
                    options.update_width(options.max_width - padding - 2),
                    renderables,
                ).maximum
                + padding
                + 2
            )
        else:
            width = self.width
        return Measurement(width, width)


if __name__ == "__main__":  # pragma: no cover
    from .console import Console

    c = Console()

    from .box import DOUBLE, ROUNDED
    from .padding import Padding

    p = Panel(
        "Hello, World!",
        title="rich.Panel",
        style="white on blue",
        box=DOUBLE,
        padding=1,
    )

    c.print()
    c.print(p)

SILENT KILLER Tool