Linux cpanel.rrshost.in 5.15.0-25-generic #25-Ubuntu SMP Wed Mar 30 15:54:22 UTC 2022 x86_64
Apache
: 109.123.238.221 | : 172.70.100.143
128 Domain
8.2.28
aev999
Terminal
AUTO ROOT
Adminer
Backdoor Destroyer
Linux Exploit
Lock Shell
Lock File
Create User
CREATE RDP
PHP Mailer
BACKCONNECT
HASH IDENTIFIER
README
+ Create Folder
+ Create File
/
usr /
lib /
python3 /
dist-packages /
pip /
_vendor /
rich /
[ HOME SHELL ]
Name
Size
Permission
Action
__pycache__
[ DIR ]
drwxr-xr-x
__init__.py
5.67
KB
-rw-r--r--
__main__.py
8.6
KB
-rw-r--r--
_cell_widths.py
9.86
KB
-rw-r--r--
_emoji_codes.py
136.95
KB
-rw-r--r--
_emoji_replace.py
1.04
KB
-rw-r--r--
_extension.py
265
B
-rw-r--r--
_inspect.py
7.27
KB
-rw-r--r--
_log_render.py
3.15
KB
-rw-r--r--
_loop.py
1.21
KB
-rw-r--r--
_lru_cache.py
1.22
KB
-rw-r--r--
_palettes.py
6.9
KB
-rw-r--r--
_pick.py
423
B
-rw-r--r--
_ratio.py
5.34
KB
-rw-r--r--
_spinners.py
25.9
KB
-rw-r--r--
_stack.py
351
B
-rw-r--r--
_timer.py
417
B
-rw-r--r--
_windows.py
2.02
KB
-rw-r--r--
_wrap.py
1.76
KB
-rw-r--r--
abc.py
890
B
-rw-r--r--
align.py
10.18
KB
-rw-r--r--
ansi.py
6.52
KB
-rw-r--r--
bar.py
3.19
KB
-rw-r--r--
box.py
8.86
KB
-rw-r--r--
cells.py
4.18
KB
-rw-r--r--
color.py
16.88
KB
-rw-r--r--
color_triplet.py
1.03
KB
-rw-r--r--
columns.py
6.96
KB
-rw-r--r--
console.py
79.33
KB
-rw-r--r--
constrain.py
1.26
KB
-rw-r--r--
containers.py
5.37
KB
-rw-r--r--
control.py
5.17
KB
-rw-r--r--
default_styles.py
7.44
KB
-rw-r--r--
diagnose.py
183
B
-rw-r--r--
emoji.py
2.44
KB
-rw-r--r--
errors.py
642
B
-rw-r--r--
file_proxy.py
1.58
KB
-rw-r--r--
filesize.py
2.45
KB
-rw-r--r--
highlighter.py
4.78
KB
-rw-r--r--
json.py
4.93
KB
-rw-r--r--
jupyter.py
2.95
KB
-rw-r--r--
layout.py
13.72
KB
-rw-r--r--
live.py
13.39
KB
-rw-r--r--
live_render.py
3.58
KB
-rw-r--r--
logging.py
10.61
KB
-rw-r--r--
markup.py
7.87
KB
-rw-r--r--
measure.py
5.13
KB
-rw-r--r--
padding.py
4.85
KB
-rw-r--r--
pager.py
838
B
-rw-r--r--
palette.py
3.32
KB
-rw-r--r--
panel.py
8.43
KB
-rw-r--r--
pretty.py
31.81
KB
-rw-r--r--
progress.py
35.08
KB
-rw-r--r--
progress_bar.py
7.58
KB
-rw-r--r--
prompt.py
11.04
KB
-rw-r--r--
protocol.py
1.37
KB
-rw-r--r--
region.py
166
B
-rw-r--r--
repr.py
4.21
KB
-rw-r--r--
rule.py
4.1
KB
-rw-r--r--
scope.py
2.78
KB
-rw-r--r--
screen.py
1.55
KB
-rw-r--r--
segment.py
23.36
KB
-rw-r--r--
spinner.py
4.21
KB
-rw-r--r--
status.py
4.32
KB
-rw-r--r--
style.py
25.85
KB
-rw-r--r--
styled.py
1.23
KB
-rw-r--r--
syntax.py
26.36
KB
-rw-r--r--
table.py
35.9
KB
-rw-r--r--
tabulate.py
1.66
KB
-rw-r--r--
terminal_theme.py
1.42
KB
-rw-r--r--
text.py
43.38
KB
-rw-r--r--
theme.py
3.54
KB
-rw-r--r--
themes.py
102
B
-rw-r--r--
traceback.py
25.33
KB
-rw-r--r--
tree.py
8.91
KB
-rw-r--r--
Delete
Unzip
Zip
${this.title}
Close
Code Editor : layout.py
from abc import ABC, abstractmethod from itertools import islice from operator import itemgetter from threading import RLock from typing import ( TYPE_CHECKING, Dict, Iterable, List, NamedTuple, Optional, Sequence, Tuple, Union, ) from ._ratio import ratio_resolve from .align import Align from .console import Console, ConsoleOptions, RenderableType, RenderResult from .highlighter import ReprHighlighter from .panel import Panel from .pretty import Pretty from .repr import rich_repr, Result from .region import Region from .segment import Segment from .style import StyleType if TYPE_CHECKING: from pip._vendor.rich.tree import Tree class LayoutRender(NamedTuple): """An individual layout render.""" region: Region render: List[List[Segment]] RegionMap = Dict["Layout", Region] RenderMap = Dict["Layout", LayoutRender] class LayoutError(Exception): """Layout related error.""" class NoSplitter(LayoutError): """Requested splitter does not exist.""" class _Placeholder: """An internal renderable used as a Layout placeholder.""" highlighter = ReprHighlighter() def __init__(self, layout: "Layout", style: StyleType = "") -> None: self.layout = layout self.style = style def __rich_console__( self, console: Console, options: ConsoleOptions ) -> RenderResult: width = options.max_width height = options.height or options.size.height layout = self.layout title = ( f"{layout.name!r} ({width} x {height})" if layout.name else f"({width} x {height})" ) yield Panel( Align.center(Pretty(layout), vertical="middle"), style=self.style, title=self.highlighter(title), border_style="blue", ) class Splitter(ABC): """Base class for a splitter.""" name: str = "" @abstractmethod def get_tree_icon(self) -> str: """Get the icon (emoji) used in layout.tree""" @abstractmethod def divide( self, children: Sequence["Layout"], region: Region ) -> Iterable[Tuple["Layout", Region]]: """Divide a region amongst several child layouts. Args: children (Sequence(Layout)): A number of child layouts. region (Region): A rectangular region to divide. """ class RowSplitter(Splitter): """Split a layout region in to rows.""" name = "row" def get_tree_icon(self) -> str: return "[layout.tree.row]⬌" def divide( self, children: Sequence["Layout"], region: Region ) -> Iterable[Tuple["Layout", Region]]: x, y, width, height = region render_widths = ratio_resolve(width, children) offset = 0 _Region = Region for child, child_width in zip(children, render_widths): yield child, _Region(x + offset, y, child_width, height) offset += child_width class ColumnSplitter(Splitter): """Split a layout region in to columns.""" name = "column" def get_tree_icon(self) -> str: return "[layout.tree.column]⬍" def divide( self, children: Sequence["Layout"], region: Region ) -> Iterable[Tuple["Layout", Region]]: x, y, width, height = region render_heights = ratio_resolve(height, children) offset = 0 _Region = Region for child, child_height in zip(children, render_heights): yield child, _Region(x, y + offset, width, child_height) offset += child_height @rich_repr class Layout: """A renderable to divide a fixed height in to rows or columns. Args: renderable (RenderableType, optional): Renderable content, or None for placeholder. Defaults to None. name (str, optional): Optional identifier for Layout. Defaults to None. size (int, optional): Optional fixed size of layout. Defaults to None. minimum_size (int, optional): Minimum size of layout. Defaults to 1. ratio (int, optional): Optional ratio for flexible layout. Defaults to 1. visible (bool, optional): Visibility of layout. Defaults to True. """ splitters = {"row": RowSplitter, "column": ColumnSplitter} def __init__( self, renderable: Optional[RenderableType] = None, *, name: Optional[str] = None, size: Optional[int] = None, minimum_size: int = 1, ratio: int = 1, visible: bool = True, height: Optional[int] = None, ) -> None: self._renderable = renderable or _Placeholder(self) self.size = size self.minimum_size = minimum_size self.ratio = ratio self.name = name self.visible = visible self.height = height self.splitter: Splitter = self.splitters["column"]() self._children: List[Layout] = [] self._render_map: RenderMap = {} self._lock = RLock() def __rich_repr__(self) -> Result: yield "name", self.name, None yield "size", self.size, None yield "minimum_size", self.minimum_size, 1 yield "ratio", self.ratio, 1 @property def renderable(self) -> RenderableType: """Layout renderable.""" return self if self._children else self._renderable @property def children(self) -> List["Layout"]: """Gets (visible) layout children.""" return [child for child in self._children if child.visible] @property def map(self) -> RenderMap: """Get a map of the last render.""" return self._render_map def get(self, name: str) -> Optional["Layout"]: """Get a named layout, or None if it doesn't exist. Args: name (str): Name of layout. Returns: Optional[Layout]: Layout instance or None if no layout was found. """ if self.name == name: return self else: for child in self._children: named_layout = child.get(name) if named_layout is not None: return named_layout return None def __getitem__(self, name: str) -> "Layout": layout = self.get(name) if layout is None: raise KeyError(f"No layout with name {name!r}") return layout @property def tree(self) -> "Tree": """Get a tree renderable to show layout structure.""" from pip._vendor.rich.styled import Styled from pip._vendor.rich.table import Table from pip._vendor.rich.tree import Tree def summary(layout: "Layout") -> Table: icon = layout.splitter.get_tree_icon() table = Table.grid(padding=(0, 1, 0, 0)) text: RenderableType = ( Pretty(layout) if layout.visible else Styled(Pretty(layout), "dim") ) table.add_row(icon, text) _summary = table return _summary layout = self tree = Tree( summary(layout), guide_style=f"layout.tree.{layout.splitter.name}", highlight=True, ) def recurse(tree: "Tree", layout: "Layout") -> None: for child in layout._children: recurse( tree.add( summary(child), guide_style=f"layout.tree.{child.splitter.name}", ), child, ) recurse(tree, self) return tree def split( self, *layouts: Union["Layout", RenderableType], splitter: Union[Splitter, str] = "column", ) -> None: """Split the layout in to multiple sub-layouts. Args: *layouts (Layout): Positional arguments should be (sub) Layout instances. splitter (Union[Splitter, str]): Splitter instance or name of splitter. """ _layouts = [ layout if isinstance(layout, Layout) else Layout(layout) for layout in layouts ] try: self.splitter = ( splitter if isinstance(splitter, Splitter) else self.splitters[splitter]() ) except KeyError: raise NoSplitter(f"No splitter called {splitter!r}") self._children[:] = _layouts def add_split(self, *layouts: Union["Layout", RenderableType]) -> None: """Add a new layout(s) to existing split. Args: *layouts (Union[Layout, RenderableType]): Positional arguments should be renderables or (sub) Layout instances. """ _layouts = ( layout if isinstance(layout, Layout) else Layout(layout) for layout in layouts ) self._children.extend(_layouts) def split_row(self, *layouts: Union["Layout", RenderableType]) -> None: """Split the layout in tow a row (Layouts side by side). Args: *layouts (Layout): Positional arguments should be (sub) Layout instances. """ self.split(*layouts, splitter="row") def split_column(self, *layouts: Union["Layout", RenderableType]) -> None: """Split the layout in to a column (layouts stacked on top of each other). Args: *layouts (Layout): Positional arguments should be (sub) Layout instances. """ self.split(*layouts, splitter="column") def unsplit(self) -> None: """Reset splits to initial state.""" del self._children[:] def update(self, renderable: RenderableType) -> None: """Update renderable. Args: renderable (RenderableType): New renderable object. """ with self._lock: self._renderable = renderable def refresh_screen(self, console: "Console", layout_name: str) -> None: """Refresh a sub-layout. Args: console (Console): Console instance where Layout is to be rendered. layout_name (str): Name of layout. """ with self._lock: layout = self[layout_name] region, _lines = self._render_map[layout] (x, y, width, height) = region lines = console.render_lines( layout, console.options.update_dimensions(width, height) ) self._render_map[layout] = LayoutRender(region, lines) console.update_screen_lines(lines, x, y) def _make_region_map(self, width: int, height: int) -> RegionMap: """Create a dict that maps layout on to Region.""" stack: List[Tuple[Layout, Region]] = [(self, Region(0, 0, width, height))] push = stack.append pop = stack.pop layout_regions: List[Tuple[Layout, Region]] = [] append_layout_region = layout_regions.append while stack: append_layout_region(pop()) layout, region = layout_regions[-1] children = layout.children if children: for child_and_region in layout.splitter.divide(children, region): push(child_and_region) region_map = { layout: region for layout, region in sorted(layout_regions, key=itemgetter(1)) } return region_map def render(self, console: Console, options: ConsoleOptions) -> RenderMap: """Render the sub_layouts. Args: console (Console): Console instance. options (ConsoleOptions): Console options. Returns: RenderMap: A dict that maps Layout on to a tuple of Region, lines """ render_width = options.max_width render_height = options.height or console.height region_map = self._make_region_map(render_width, render_height) layout_regions = [ (layout, region) for layout, region in region_map.items() if not layout.children ] render_map: Dict["Layout", "LayoutRender"] = {} render_lines = console.render_lines update_dimensions = options.update_dimensions for layout, region in layout_regions: lines = render_lines( layout.renderable, update_dimensions(region.width, region.height) ) render_map[layout] = LayoutRender(region, lines) return render_map def __rich_console__( self, console: Console, options: ConsoleOptions ) -> RenderResult: with self._lock: width = options.max_width or console.width height = options.height or console.height render_map = self.render(console, options.update_dimensions(width, height)) self._render_map = render_map layout_lines: List[List[Segment]] = [[] for _ in range(height)] _islice = islice for (region, lines) in render_map.values(): _x, y, _layout_width, layout_height = region for row, line in zip( _islice(layout_lines, y, y + layout_height), lines ): row.extend(line) new_line = Segment.line() for layout_row in layout_lines: yield from layout_row yield new_line if __name__ == "__main__": from pip._vendor.rich.console import Console console = Console() layout = Layout() layout.split_column( Layout(name="header", size=3), Layout(ratio=1, name="main"), Layout(size=10, name="footer"), ) layout["main"].split_row(Layout(name="side"), Layout(name="body", ratio=2)) layout["body"].split_row(Layout(name="content", ratio=2), Layout(name="s2")) layout["s2"].split_column( Layout(name="top"), Layout(name="middle"), Layout(name="bottom") ) layout["side"].split_column(Layout(layout.tree, name="left1"), Layout(name="left2")) layout["content"].update("foo") console.print(layout)
Close