{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Prototype Rich" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [], "source": [ "from rich import print as pr\n", "from fastcore.all import L, patch\n", "from fastcore.xtras import sparkline\n", "from rich.columns import Columns\n", "from rich.console import RenderGroup\n", "from rich.table import Table\n", "from rich.padding import Padding\n", "from rich.console import Console\n", "from rich.progress import Progress, Spinner, BarColumn\n", "from rich.live import Live\n", "from random import randint\n", "from collections import deque\n", "from rich import spinner\n", "from rich.panel import Panel\n", "import time\n", "from fastcore.xtras import sparkline\n", "data = [9,6,None,1,4,1,8,15,10]" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [], "source": [ "h_cmt = deque([1], 5)\n", "h_iss = deque([1], 5)\n", "h_pr = deque([1], 5)\n", "h_rel = deque([1], 5)" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [], "source": [ "def update_stats(d:dict=dict(c_cmt=0, c_iss=0, c_pr=0, c_rel=0)):\n", " \n", " h_cmt.append(d['c_cmt'])\n", " h_iss.append(d['c_iss'])\n", " h_pr.append(d['c_pr'])\n", " h_rel.append(d['c_rel'])\n", " \n", " sd = dict(s_cmt=sparkline(h_cmt), s_iss=sparkline(h_iss), s_pr=sparkline(h_pr), s_rel=sparkline(h_rel))\n", " d.update(sd)\n", " \n", " row = (':heavy_plus_sign: Commits \\n[blue]{c_cmt} {s_cmt} [/] ',\n", " ':ticket: Issues \\n[red]{c_iss} {s_iss} [/]',\n", " ':handshake: PRs \\n[deep_pink1]{c_pr} {s_pr} [/]',\n", " ':rocket: Releases \\n[green]{c_rel} {s_rel} [/]')\n", "\n", " grid = Table.grid()\n", " for c in ['Commits','Issues', 'PRs', 'Releases']:\n", " grid.add_column(c, justify='center')\n", " grid.add_row(*(x.format(**d) for x in row))\n", " \n", " return grid\n", "\n", "def _r(): return randint(10,100)\n" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "a78abb9b57fc45c29b6be5cdf30dd79e", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Output()" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "quotap = Progress(\n", " \"[progress.description]{task.description}\",\n", " BarColumn(bar_width=50),\n", " \"[progress.percentage]{task.percentage:>3.0f}%\",\n", ")\n", "qtask = quotap.add_task(\"\", total=100)\n", "qgrid = Table.grid()\n", "qgrid.add_column(justify='center')\n", "qgrid.add_row(\"Quota\")\n", "qgrid.add_row(quotap.get_renderable())\n", "\n", "\n", "\n", "counts = update_stats()\n", "qgroup = RenderGroup(\"Quota\", quotap.get_renderable())\n", "\n", "stat_group = Columns([RenderGroup(Padding(Spinner('earth'), [0,0,0,4]), 'events/s'), counts, qgrid], \n", " column_first=True, align='center')" ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "b394ed8a7d304a4da8ae56caf979e529", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Output()" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "with Live(refresh_per_second=5) as live:\n", " for _ in range(100):\n", " quotap.update(qtask, advance=1)\n", "# stat_group.renderables[2] = quotap.get_renderable()\n", " stat_group.renderables[2].columns[0]._cells[1] = quotap.get_renderable()\n", " d=dict(c_cmt=_r(), c_iss=_r(), c_pr=_r(), c_rel=_r())\n", " new_count = update_stats(d)\n", " stat_group.renderables[1] = new_count\n", " live.update(stat_group)\n", " time.sleep(0.1)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "without \"empty_zero\": ▃▂ ▁▁▁▃▇▅\n", " with \"empty_zero\": ▃▂ ▁▁▁▃▇▅\n" ] } ], "source": [ "from fastcore.xtras import sparkline\n", "data = [9,6,None,1,4,1,8,15,10]\n", "print(f'without \"empty_zero\": {sparkline(data, empty_zero=False)}')\n", "print(f' with \"empty_zero\": {sparkline(data, empty_zero=True )}')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "TODO:\n", "\n", "- Use emojis from `ghapi.event`\n", "- Refactor this code so its not so ugly and repetitive" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.3" } }, "nbformat": 4, "nbformat_minor": 4 }