Skip to content

Latest commit

 

History

History
465 lines (312 loc) · 19.9 KB

README.id.md

File metadata and controls

465 lines (312 loc) · 19.9 KB

Supported Python Versions PyPI version

Downloads codecov Rich blog Twitter Follow

Logo

English readme简体中文 readme正體中文 readmeLengua española readmeDeutsche readmeLäs på svenska日本語 readme한국어 readmeFrançais readmeSchwizerdütsch readmeहिन्दी readmePortuguês brasileiro readmeItalian readmeРусский readmeIndonesian readmeفارسی readmeTürkçe readmePolskie readme

Rich adalah library Python yang membantu memperindah tampilan output suatu program di terminal.

Rich API dapat digunakan untuk mempermudah dalam penambahan gaya dan pewarnaan output di terminal. Rich juga mendukung fitur lain seperti pembuatan tabel, bar progress, penulisan markdown, penghilightan syntax source code, tracebacks, dan masih banyak lagi.

Features

Sebagai pengenalan Rich saksikan video berikut calmcode.io oleh @fishnets88.

Lihat pendapat pengguna yang telah menggunakan Rich.

Kompabilitas

Rich dapat berjalan di Linux, OSX, dan Windows. Warna tambahan / emoji dapat berjalan di Windows Terminal baru, untuk terminal lama pewarnaan terbatas ke dalam 16 warna. Rich memerlukan versi Python 3.6.3 atau ke atas.

Rich dapat berjalan di Jupyter notebooks tanpa memerlukan konfigurasi tambahan.

Instalasi

Install dengan pip atau paket manager favorit anda.

python -m pip install rich

Jalankan perintah berikut untuk menguji Rich di terminal anda:

python -m rich

Rich Print

Untuk menambahkan rich sebagai output program anda, lakukan import method rich print, yang memiliki signature sama dengan fungsi built-in Python. Coba jalankan program berikut:

from rich import print

print("Hello, [bold magenta]World[/bold magenta]!", ":vampire:", locals())

Hello World

Rich REPL

Rich dapat diinstal ke dalam Python REPL sehingga setiap struktur data akan ditampilkan dengan indah dan terhighlight.

>>> from rich import pretty
>>> pretty.install()

REPL

Penggunaan Console

Untuk kontrol lebih terhadap konten terminal, lakukan import dan susun suatu Console object.

from rich.console import Console

console = Console()

Console object memiliki method print yang berfungsi serupa dengan built-in print. Berikut adalah contoh penggunaannya:

console.print("Hello", "World!")

Seperti yang anda perkirakan, perintah tersebut akan menampilkan "Hello World!" sebagai output di terminal. Catatan, perbedaan dengan fungsi built-in print, Rich membuat teks termampatkan disesuaikan dengan lebar terminal.

Terdapat beberapa cara untuk melakukan penambahan warna dan gaya output dari program anda. Anda dapat mengatur keseluruhan output dengan menambahkan keyword argumen style. Berikut adalah contoh penerapannya:

console.print("Hello", "World!", style="bold red")

Output dari perintah tersebut akan tampak sebagai berikut:

Hello World

Melakukan perubahan tampilan teks output dalam satu waktu mungkin sudah baik. Tetapi untuk membuat tampilan lebih rapi, Rich mendukung fitur rendering menggunakan pemformatan spesial dimana syntaxnya serupa dengan bbcode. Berikut adalah contoh penerapannya:

console.print("Where there is a [bold cyan]Will[/bold cyan] there [u]is[/u] a [i]way[/i].")

Console Markup

Anda dapat menggunakan console object untuk menciptakan keluaran yang indah dengan usaha yang sedikit. Kunjungi Console API untuk informasi lebih lengkap.

Rich Inspect

Rich memiliki fungsi inspect yang dapat membuat laporan untuk setiap Python object, seperti class, instance, atau built-in.

>>> my_list = ["foo", "bar"]
>>> from rich import inspect
>>> inspect(my_list, methods=True)

Log

Kunjungi dokumentasi inspect untuk detail lebih lanjut.

Rich Library

Rich mengandung sejumlah built-in yang bersifat renderables, artinya anda dapat menciptakan output yang elegant pda program CLI anda serta dapat membantu dalam proses debugging program anda.

Klik pilihan berikut untuk detail lebih lanjut:

Log

Console object mempunyai method bernama log() yang serupa dengan print(), tetapi juga mendukung fitur perenderan kolom waktu terkini serta baris file yang melakukan pemanggilan fungsi tertentu. Secara default Rich akan menghilight syntax untuk struktur python dan REPR strings. Jika anda melakukan log pada sekumpulan data (misal dictionary atau list) Rich akan memperindah output yang ditampilkan serta disesuaikan dengan ukuran terminal yang tersedia. Berikut adalah contoh penerapan dari beberapa fitur ini.

from rich.console import Console
console = Console()

test_data = [
    {"jsonrpc": "2.0", "method": "sum", "params": [None, 1, 2, 4, False, True], "id": "1",},
    {"jsonrpc": "2.0", "method": "notify_hello", "params": [7]},
    {"jsonrpc": "2.0", "method": "subtract", "params": [42, 23], "id": "2"},
]

def test_log():
    enabled = False
    context = {
        "foo": "bar",
    }
    movies = ["Deadpool", "Rise of the Skywalker"]
    console.log("Hello from", console, "!")
    console.log(test_data, log_locals=True)


test_log()

Perintah di atas akan menampilkan output sebagai berikut:

Log

Sebagai catatan, argumen log_locals berupa tabel yang berisikan variabel lokal yang menunjukkan lokasi dimana log tersebut dipanggil.

Method log ini dapat digunakan untuk mencatat aktivitas terminal yang berjalan lama seperti servers, tetapi method ini juga sangat baik untuk membantu dalam proses debugging.

Penanganan Logging

Anda dapat juga menggunakan builtin Handler class untuk memformat dan mewarnai output dari module logging Python. Berikut adalah contoh penerapannya:

Logging

Emoji

Untuk menambahkan emoji sebagai output di console, tuliskan nama emoji diantara dua buah titik dua (:). Berikut adalah contoh penerapannya:

>>> console.print(":smiley: :vampire: :pile_of_poo: :thumbs_up: :raccoon:")
😃 🧛 💩 👍 🦝

Mohon gunakan fitur ini dengan bijak.

Tabel

Rich mendukung perenderan tabel secara fleksibel dengan karakter unicode. Terdapat variasi sangat besar untuk opsi pemformatan seperti pengaturan border, gaya tabel, perataan teks di dalam cell, dan lain sebagainya.

table movie

Animasi di atas dibuat dengan program table_movie.py pada direktori examples.

Berikut adalah contoh tabel sederhana:

from rich.console import Console
from rich.table import Table

console = Console()

table = Table(show_header=True, header_style="bold magenta")
table.add_column("Date", style="dim", width=12)
table.add_column("Title")
table.add_column("Production Budget", justify="right")
table.add_column("Box Office", justify="right")
table.add_row(
    "Dec 20, 2019", "Star Wars: The Rise of Skywalker", "$275,000,000", "$375,126,118"
)
table.add_row(
    "May 25, 2018",
    "[red]Solo[/red]: A Star Wars Story",
    "$275,000,000",
    "$393,151,347",
)
table.add_row(
    "Dec 15, 2017",
    "Star Wars Ep. VIII: The Last Jedi",
    "$262,000,000",
    "[bold]$1,332,539,889[/bold]",
)

console.print(table)

Program di atas akan menghasilkan output sebagai berikut:

tabel

Sebagai catatan console markup dirender sama seperti print() dan log(). Faktanya, untuk segala bentuk hal yang dapat dirender menggunakan Rich dapat disisipkan ke dalam header / baris (bahkan tabel lain).

Class Table memiliki kemampuan yang baik untuk mengatur ukuran kolom supaya sesuai dengan lebar yang disediakan oleh terminal. Berikut adalah contoh penerapannya, dengan terminal memiliki ukuran yang lebih kecil dibandingkan tabel di atas:

table2

Bar Progress

Rich dapat merender beragam bar progress interaktif untuk memantau kemajuan yang telah dicapai oleh program yang berjalan lama.

Untuk penggunaan dasar, masukan setiap urutan yang hendak dijadikan ke dalam bentuk progress ke dalam fungsi 'track' dan iterasikan urutan tersebut di atas outputnya. Berikut adalah contoh penerapannya:

from rich.progress import track

for step in track(range(100)):
    do_step(step)

Tidaklah sulit untuk menambahkan beberapa bar progress sekaligus. Berikut adalah contoh implementasi yang diambil dari file dokumentasi:

progress

Bagian kolom dapat dikonfigurasikan sesuai dengan kebutuhan. Built-in kolom juga memiliki fitur presentasi seleasi, ukuran file, kecepatan file, dan waktu sisa. Berikut adalah contoh menampilkan bar progress ketika mengunduh suatu file:

progress

Untuk bereksperimen, periksa examples/downloader.py yang dapat menampilkan beberapa progress bar pengunduhan dari beberapa alamat URL sekaligus.

Status

Untuk kondisi dimana perhitungan sulit dilakukan dengan perhitunggan progress, gunakan method status berikut yang menampilkan animasi 'spinner' dan pesan. Animasi tersebut tidak mencegah penggunaan console seperti keadaan normal. Berikut adalah contoh penerapannya:

from time import sleep
from rich.console import Console

console = Console()
tasks = [f"task {n}" for n in range(1, 11)]

with console.status("[bold green]Working on tasks...") as status:
    while tasks:
        task = tasks.pop(0)
        sleep(1)
        console.log(f"{task} complete")

Program di atas akan menghasilkan output sebagai berikut.

status

Animasi spinner tersebut diambil dari cli-spinners. Anda dapat menentukan spinner yang hendak digunakan dengan menspesifikannya di parameter spinner. Jalankan perintah berikut untuk melihat parameter yang tersedia:

python -m rich.spinner

Perintah di atas akan menghasilkan output sebagai berikut:

spinners

Tree

Rich dapat merender perintah tree beserta dengan garis penunjuk. Suatu perintah tree idealnya digunakan untuk menampilkan struktur suatu file atau data hierarki lainnya.

Label dari tree dapat berupa teks sederhana atau apapun yang dapat dirender oleh Rich, untuk contoh, jalankan perintah berikut:

python -m rich.tree

Program di atas akan menghasilkan output sebagai berikut:

markdown

Periksa contoh program tree.py untuk menampilkan tampilan tree view dari direktori apapun, perintah ini serupa dengan tree pada linux.

Kolom

Rich dapat merender konten kolom secara rapi dengan ukuran lebar yang sama atau optimal. Berikut adalah hasil kloning perintah dasar dari (MacOS / Linux) yaitu ls untuk melakukan listing direktori menggunakan kolom:

import os
import sys

from rich import print
from rich.columns import Columns

directory = os.listdir(sys.argv[1])
print(Columns(directory))

Screenshot berikut merupakan output dari contoh kolom yang menampilkan data yang diambil melalui API ke dalam bentuk kolom:

columns

Markdown

Rich dapat merender markdown dan melakukan tugasnya untuk menerjemahkan format tersebut supaya dapat ditampilkan di terminal.

Untuk dapat merender markdown, import class Markdown dan inputkan string yang mengandung markdown tersebut. Lalu cetak ke dalam console. Berikut adalah contoh penerapannya:

from rich.console import Console
from rich.markdown import Markdown

console = Console()
with open("README.md") as readme:
    markdown = Markdown(readme.read())
console.print(markdown)

Program di atas akan menghasilkan output seperti berikut:

markdown

Penghilightan Syntax

Rich memanfaatkan library pygments supaya dapat melakukan penghilightan syntax. Penggunaannya serupa dengan merender markdown; susun object Syntax dan cetak output pada console. Berikut adalah contoh penerapannya:

from rich.console import Console
from rich.syntax import Syntax

my_code = '''
def iter_first_last(values: Iterable[T]) -> Iterable[Tuple[bool, bool, T]]:
    """Iterate and generate a tuple with a flag for first and last value."""
    iter_values = iter(values)
    try:
        previous_value = next(iter_values)
    except StopIteration:
        return
    first = True
    for value in iter_values:
        yield first, False, previous_value
        first = False
        previous_value = value
    yield first, True, previous_value
'''
syntax = Syntax(my_code, "python", theme="monokai", line_numbers=True)
console = Console()
console.print(syntax)

Program di atas akan menghasilkan output sebagai berikut:

syntax

Tracebacks

Rich dapat merender tracebacks dengan indah yang membuatnya mudah untuk dibaca dan menampilkan program yang dibuat lebih baik dibandingkan fitur standar Python. Anda dapat mengatur Rich sebagai traceback handler secara default sehingga setiap pesan exceptions akan dirender melalui Rich.

Berikut adalah tampilannya pada OSX (serupa dengan Linux):

traceback

Semua perenderan Rich menggunakan Console Protocol, anda dapat juga mengimplementasikannya pada konten Rich milik anda.

Rich CLI

Baca juga Rich CLI sebuah program command line yang dibuat menggunakan Rich. Penghilightan syntax, perenderan markdown, menampilkan CSVs ke dalam tabel, dan masih banyak lagi, secara langsung melalui command prompt.

Rich CLI

Projek yang telah menggunakan Rich

Berikut adalah beberpa projek yang menggunakan Rich:

  • BrancoLab/BrainRender Sebuah package Python untuk visualisasi data neuro-anatomi tiga dimensi.
  • Ciphey/Ciphey Tools yang digunakan untuk melakukan deskripsi otomatis.
  • emeryberger/scalene profiler memori dan CPU untuk Python yang memiliki nilai performa dan presisi tinggi.
  • hedythedev/StarCli Melakukan penelusuran projek terkenal GitHub melalui command line.
  • intel/cve-bin-tool Tools ini dapat digunakan untuk melakukan scanning pada komponen yang rentan (openssl, libpng, libxml2, expat and a few others) untuk membuat anda mengetahui sistem anda mempunyai library yang telah diketahui kerentanannya.
  • nf-core/tools package Python dengan tools bantuan untuk komunitas nf-core.
  • cansarigol/pdbr gabungan library pdb + Rich library untuk memperindah proses debugging.
  • plant99/felicette gambar citra satelit untuk pemula.
  • seleniumbase/SeleniumBase tools otomatisasi dan test testing 10x lebih cepat dibandingkan dengan Selenium & pytest. Termasuk didalamnya baterai.
  • smacke/ffsubsync tools sinkronisasi subtitle dengan video.
  • tryolabs/norfair Library Python ringan untuk menambahkan deteksi objek secara real-time pada objek 2D pada suatu detektor.
  • ansible/ansible-lint Sebuah ansible-lint untuk memeriksa playbooks yang digunakan sebagai practices and behaviour yang secara potensial dapat ditingkatkan.
  • ansible-community/molecule Ansible Molecule untuk framework testing
  • +Lebih banyak lagi!