def test_shortcuts(): assert Align.left("foo").align == "left" assert Align.left("foo").renderable == "foo" assert Align.right("foo").align == "right" assert Align.right("foo").renderable == "foo" assert Align.center("foo").align == "center" assert Align.center("foo").renderable == "foo"
def make_sponsor_message() -> Panel: """Some example content.""" sponsor_message = Table.grid(padding=1) sponsor_message.add_column(style="green", justify="right") sponsor_message.add_column(no_wrap=True) sponsor_message.add_row( "✔ GitHub 🤓 ", "[u blue link=https://github.com/jiaulislam]https://github.com/jiaulislam", ) intro_message = Text.from_markup( """Consider supporting my work via Github 🤘 🤘 🤘. - Jiaul Islam""" ) message = Table.grid(padding=1) message.add_column() message.add_column(no_wrap=True) message.add_row(intro_message, sponsor_message) message_panel = Panel( Align.center( RenderGroup(intro_message, "\n", Align.center(sponsor_message)), vertical="middle", ), box=box.ROUNDED, padding=(1, 2), title="[b red]Thanks for using my application!", border_style="bright_blue", ) return message_panel
def merge_layout(cls, progress, table) -> None: cls._layout["progress"].update( Panel(Align.center(progress, vertical="middle"), border_style="green", title="Overall Status")) cls._layout["tables"].update( Panel(Align.center(table, vertical="middle"), border_style="cyan", title="Details"))
def setup_layout(self): self.layout.split(Layout(name='A'), Layout(name='B')) self.layout['A'].size = 10 self.layout['A'].update(self.build_stats_panel()) self.layout['B'].split_row(Layout(name='C'), Layout(name='D')) self.layout['C'].split(Layout(name='E'), Layout(name='F')) self.layout['E'].update(Align.center(self.build_ps_histogram())) self.layout['D'].update(Align.center(self.build_top_offenders_panel())) self.layout['F'].update(Align.center(self.build_vuln_table())) #self.layout['AA'].update(self.build_stats_panel()) self.console.print(self.layout) return
def __init__( self, numRepos: int, follower: int = 0, following: int = 0, numStat: int = 5, ) -> None: self.numStat = numStat self.numRepos = numRepos self._profileText = Text( f"{follower:03d} Follower\n{following:03d} Following\n{numRepos:03d} Public Repositories" ) self.progressTable = Table.grid(expand=True) self.progressTotal = Progress( "{task.description}", SpinnerColumn(), BarColumn(), TextColumn("[progress.percentage]{task.percentage:>3.0f}%"), ) self.progressTable.add_row( Panel( Align.center(Text( """Placeholder""", justify="center", )), title="[b]Info", border_style="red", padding=(1, 1), ), Panel( Align.center(self._profileText), title="[b]Profile Info", border_style="yellow", padding=(1, 1), ), Panel( self.progressTotal, # type:ignore title="[b]Total Progress", border_style="green", padding=(1, 2), ), ) self.taskTotal = self.progressTotal.add_task(description="Progress", total=numStat * numRepos) self.taskRepo = self.progressTotal.add_task( description="Repository [bold yellow]#", total=numRepos) self.taskStat = self.progressTotal.add_task( description="Stat [bold violet]#", total=numStat)
def show_toolbox_apps(toolbox: ToolBox) -> Dict[str, list[str]]: apps = toolbox.apps() columns = {"available": [], "unavailable": []} for app, path in apps.items(): if any(map(lambda x: app.lower().startswith(x.lower()), working)): columns["available"].append(app) else: columns["unavailable"].append(app) panel = Text() for i, available in enumerate(columns["available"], start=1): left = (f"{i}. ", "bold gray") right = (f"{available}\n", "green") panel.append(Text.assemble(left, right)) for unavailable in columns["unavailable"]: panel.append(Text(f" {unavailable}\n", style="red")) console.print(Align.center(Panel.fit(panel, title="Available IDEs"))) return columns
def get_top_layout() -> Panel: _memory: Tuple[str] = get_memory_info() _platform: str = get_platform() _pyversion: str = get_python_version() _total_memory: str = _memory[0] _available_memory: str = _memory[1] _used_percentage: str = _memory[2] _used_memory: str = _memory[3] _free_memory: str = _memory[4] table = Table.grid(expand=True) table.add_row("Total Memory: ", Text(_total_memory, style="yellow", justify="right")) table.add_row("Available Memory: ", Text(_available_memory, style="green", justify="right")) table.add_row("Used Memory: ", Text(_used_memory, style="red", justify="right")) table.add_row("Free Memory: ", Text(_free_memory, style="green", justify="right")) table.add_row("Used Percentage: ", Text(_used_percentage, style="magenta", justify="right")) table.add_row("OS: ", Text(_platform, style="blue", justify="right")) table.add_row("Python Version: ", Text(_pyversion, style="blue", justify="right")) return Panel( Align.center(table, vertical="middle", pad=False), title="System Info", border_style="white", )
def print_progress(console, progress): is_first = progress['episode_number'] == 1 table = Table(show_header=is_first, header_style='bold #2070b2') table_centered = Align.center(table) with Live(table_centered, console=console, screen=False, refresh_per_second=20): table.add_column('Episode', justify='center') table.add_column('Acc. Reward', justify='center') table.add_column('Rol. Reward', justify='center') table.add_column('Record', justify='center') table.add_column('Epsilon', justify='center') table.add_column('Loss', justify='center') table.add_row("{: >5d}".format(progress['episode_number']), "{:+.2f}".format(progress['reward']), "{:+.2f}".format(progress['rolling_reward']), "{:+.2f}".format(progress['record']), "{:+.4f}".format(progress['epsilon']), "{:+.3f}".format(progress['loss']))
def search(query: str, amount: int, ignore_errors: bool, min_views, max_views, game) -> None: channels = API.search(query, live=True, amount=amount) table = Table() table_centerd = Align.center(table) table.add_column("channel") table.add_column("views") table.add_column("game") table.add_column("title") table.title = f"search results for [bold]{query}[/bold]" with Live(table_centerd, console=Console, refresh_per_second=20): for channel in channels: try: stream = API.get_stream_info(channel) except Exception as e: if not ignore_errors: table.add_row(f"www.twitch.tv/{channel}", "[bold red]E[/bold red]", "[bold red]Error[/bold red]", f"[bold red]{e}[/bold red]") else: if max_views is not None and stream.views > max_views: continue if min_views is not None and stream.views < min_views: continue if game is not None and stream.game != game: continue table.add_row(f"www.twitch.tv/{stream.channel}", str(stream.views), str(stream.game), str(stream.title))
def get_table_panel(table: Table) -> Panel: table_panel = Panel( Align.center( table, vertical="middle" ), title="Task Details", border_style="yellow", padding=(1, 0), expand=True ) return table_panel
def render(self) -> RenderableType: """Get renderable for widget. Returns: RenderableType: Any renderable """ return Panel(Align.center(Pretty(self), vertical="middle"), title=self.__class__.__name__)
def generate_table(count): '''make a new table''' table = Table(title="keypress frequency") table.add_column('Key') table.add_column('Frequency') temp_dict = dict(itertools.islice(total_keystrokes.items(), count)) for key, val in temp_dict.items(): table.add_row(key, str(val)) return Align.center(table)
def render(self) -> RenderableType: return Panel( Align.center(self.pretty_text, vertical="middle"), # title=self.name, border_style="green" if self.mouse_over else "blue", box=box.HEAVY if self.has_focus else box.ROUNDED, style=self.style, height=self.height, )
def __rich_console__(self, console: Console, options: ConsoleOptions) -> RenderResult: width = options.max_width height = options.height or 1 yield Align.center(self.label, vertical="middle", style=self.style, width=width, height=height)
def render(self) -> RenderableType: return Panel( Align.center(Pretty(self, no_wrap=True, overflow="ellipsis"), vertical="middle"), title="Department", border_style="green" if self.mouse_over else "blue", box=box.HEAVY if self.has_focus else box.ROUNDED, style=self.style, height=self.height, )
def present_hyperparameters(console, hyperparameters): assert isinstance(hyperparameters, dict), "Hyperparameters must be a dictionary" table = Table(show_header=True, header_style="bold green") table.add_column("Hyperparameter Name", style="dim", width=25, justify="center") table.add_column("Value", justify="center", width=15) table.width = Measurement.get(console, table, console.width).maximum Align.center(table) for key in hyperparameters: table.add_row('[red]' + key + '[/red]', str(hyperparameters[key])) console.print(table)
def get_panel(title, width, zone, render_secs, render_ms, color): return Panel( Align.center( get_time_string(zone=zone, render_secs=render_secs, render_ms=render_ms, color=color), #vertical="middle", ), title=title, #width=width, height=8, highlight=True, style=Style(color=color))
def make_stack_panel(debugger) -> Panel: stack_table = stackdump(debugger.executor.vm_context._stack.values) stack_panel = Panel( Align.center(stack_table), box=box.ROUNDED, padding=(1, 1), title="[b red]Stack", border_style="bright_blue", ) return stack_panel
def make_sponsor_message() -> Panel: """Some example content.""" sponsor_message = Table.grid(padding=1) sponsor_message.add_column(style="green", justify="right") sponsor_message.add_column(no_wrap=True) sponsor_message.add_row( "Sponsor me", "[u blue link=https://github.com/sponsors/willmcgugan]https://github.com/sponsors/willmcgugan", ) sponsor_message.add_row( "Buy me a :coffee:", "[u blue link=https://ko-fi.com/willmcgugan]https://ko-fi.com/willmcgugan", ) sponsor_message.add_row( "Twitter", "[u blue link=https://twitter.com/willmcgugan]https://twitter.com/willmcgugan", ) sponsor_message.add_row( "Blog", "[u blue link=https://www.willmcgugan.com]https://www.willmcgugan.com" ) intro_message = Text.from_markup( """Consider supporting my work via Github Sponsors (ask your company / organization), or buy me a coffee to say thanks. - Will McGugan""" ) message = Table.grid(padding=1) message.add_column() message.add_column(no_wrap=True) message.add_row(intro_message, sponsor_message) message_panel = Panel( Align.center( RenderGroup(intro_message, "\n", Align.center(sponsor_message)), vertical="middle", ), box=box.ROUNDED, padding=(1, 2), title="[b red]Thanks for trying out Rich!", border_style="bright_blue", ) return message_panel
def make_memory_panel(debugger) -> Panel: addr = 0 mem_bytes = debugger.executor.vm_context.memory_read_bytes(0, 16*8) byte = ''.join(['%02X' % b for b in mem_bytes]) res = hexdump(byte, start=int(addr), to_list=True) mem_table = Table.grid(padding=0) for i in res: mem_table.add_row(i) memory_panel = Panel( Align.center( Group('', "\n", Align.center(mem_table)), vertical="top", ), box=box.ROUNDED, padding=(0, 1), title="[b red]Memory", border_style="bright_blue", ) return memory_panel
def make_message(): message = Table.grid(padding=1) message.add_column(style="green", justify="right") message.add_column(no_wrap=True) intro_message = Text.from_markup("""Thanks for trying out!""") message.add_row("Check the Repository on GitHub", ("[u blue link=https://github.com/samborba/rich-terminal]" "https://github.com/samborba/rich-terminal")) message_panel = Panel( Align.center( RenderGroup(intro_message, "\n", Align.center(message)), vertical="middle", ), box=box.ROUNDED, title="[b white]RICH TERMINAL", border_style="bright_blue", ) return message_panel
def make_layout(portfolio): layout = Layout(name="Tinkoff") layout.split( Layout(name="header", size=3), Layout(name="main"), ) layout['main'].split( Layout(name='table', ratio=5), Layout(name='currencies', ratio=1.5), direction="horizontal", ) layout['header'].update(Header()) layout['table'].update(Align.center(PortfolioTable(portfolio), )) layout['currencies'].update(CurrenciesTable()) return layout
def __rich_console__(self, console: Console, options: ConsoleOptions) -> RenderResult: items = [] color_id = 0 for endpoint_name, endpoint_data in self.endpoint.items(): color = RICH_BACKEND_COLORS[color_id] color_id += 1 item = Panel.fit( Endpoint(endpoint_data), title=f"[{color}]{endpoint_name}[/]", # box=box.SIMPLE, ) items.append(item) yield Align.center(Columns(items), vertical="middle")
def print_calendar(year): """Print a calendar for a given year.""" today = datetime.today() year = int(year) cal = calendar.Calendar() today_tuple = today.day, today.month, today.year tables = [] for month in range(1, 13): table = Table( title=f"{calendar.month_name[month]} {year}", style="green", box=box.SIMPLE_HEAVY, padding=0, ) for week_day in cal.iterweekdays(): table.add_column("{:.3}".format(calendar.day_name[week_day]), justify="right") month_days = cal.monthdayscalendar(year, month) for weekdays in month_days: days = [] for index, day in enumerate(weekdays): day_label = Text(str(day or ""), style="magenta") if index in (5, 6): day_label.stylize("blue") if day and (day, month, year) == today_tuple: day_label.stylize("white on dark_red") days.append(day_label) table.add_row(*days) tables.append(Align.center(table)) console = Console() columns = Columns(tables, padding=1, expand=True) console.rule(str(year)) console.print() console.print(columns) console.rule(str(year))
def table(info): table = Table.grid(expand=False) table.add_column("Hardware", justify="left", style="cyan") table.add_column("product", justify="right", style="magenta") table.add_column("Status", justify="left", style="green") table.add_column("Num", justify="right", style="magenta", width=3) for i, cpu in enumerate(info['cpus']): usage = str(cpu.get('usage', '0')) + '%' table.add_row("CPU", Padding(cpu.get('name', ''), (0, 1)), usage, str(i)) for i, gpu in enumerate(info['gpus']): usage = str(gpu.get('usage', '0')) + '%' memory = str(gpu.get('men_used', '0')) + '/' + str( gpu.get('men_total', '0')) temp = str(gpu.get('temp', '0')) + '°' table.add_row("GPU", Padding(gpu.get('name', ''), (0, 1)), usage, str(i)) table.add_row("GPU", "", memory, str(i)) table.add_row("GPU", "", temp, str(i)) for i, disk in enumerate(info['disk']): usage = int(disk.get('used', 0) / disk.get('total', 1) * 100) usage = str(usage) + '%' table.add_row("DISK", Padding("disk " + str(i), (0, 1)), usage, "") ram_usage = int(info['mem'].get('used', 0) / info['mem'].get('total', 1) * 100) ram_usage = str(ram_usage) + '%' table.add_row("RAM", Padding("ram", (0, 1)), ram_usage, "") table.add_row("NET", Padding("received", (0, 1)), str(info['net'].get('in', '0')) + "MB", "") table.add_row("NET", Padding("sent", (0, 1)), str(info['net'].get('out', '0')) + "MB", "") return Panel( Align.center(table), box=box.ROUNDED, border_style="bright_blue", )
def updateSuper(self, details): table = Table(box=box.SIMPLE) table.add_column("Map") table.add_column("Requirement") for row in range(self.height): output = "" for col in range(self.width): if self.map[row][col] == 1: output += "#" elif self.map[row][col] == 0: output += " " if row < len(details): for i in range(0, len(details)): if (row == i): table.add_row(output, details[i]) else: table.add_row(output, "") table.add_row(Padding("\n", 1)) return Align.center(table)
def column(renderable): """Constrain width and align to center to create a column.""" return Align.center(renderable, width=LAYOUT_WIDTH, pad=False)
def render(self) -> Panel: return Panel( Align.center(FigletText(self._text), vertical="middle"), style=("on red" if self.mouse_over else ""), )
""" Demonstration of Console.screen() """ from time import sleep from rich.align import Align from rich.console import Console from rich.panel import Panel console = Console() with console.screen(style="bold white on red") as screen: text = Align.center("[blink]Don't Panic![/blink]", vertical="middle") screen.update(Panel(text)) sleep(5)
Layout(name="header", size=1), Layout(ratio=1, name="main"), Layout(size=10, name="footer"), ) layout["main"].split(Layout(name="side"), Layout(name="body", ratio=2), direction="horizontal") layout["side"].split(Layout(), Layout()) layout["body"].update( Align.center( Text( """This is a demonstration of rich.Layout\n\nHit Ctrl+C to exit""", justify="center", ), vertical="middle", )) class Clock: """Renders the time in the center of the screen.""" def __rich__(self) -> Text: return Text(datetime.now().ctime(), style="bold magenta", justify="center") layout["header"].update(Clock())