Skip to main content

A typed Python wrapper for the gum CLI tool.

Project description

gum-py

A typed Python wrapper for the gum CLI tool.

Build glamorous interactive shell scripts from Python — without writing a line of Go.

Requirements

Installation

pip install gum-py

Install gum itself via your package manager:

brew install gum          # macOS / Linux
winget install charmbracelet.gum  # Windows

Quick start

from gum import Gum

with Gum() as g:
    kind = g.choose(
        items=["fix", "feat", "docs", "chore"],
        header="Commit type",
    )
    scope   = g.input(placeholder="scope (optional)")
    summary = g.input(placeholder="Short summary", width=72)
    body    = g.write(placeholder="Extended description  (ctrl+d to finish)")

    if g.confirm(prompt="Commit?", default=False):
        import subprocess
        msg = f"{kind[0]}{f'({scope})' if scope else ''}: {summary}"
        subprocess.run(["git", "commit", "-m", msg, "-m", body])

Run the built-in demo:

python -m gum
# or, after pip install:
gum-demo

Two calling styles

Every method accepts either inline kwargs (a config model is built internally) or an explicit config object (validated before the call):

g = Gum()

# Style 1 — inline kwargs
selected = g.choose(items=["a", "b", "c"], height=5)

# Style 2 — config object
from gum import ChooseConfig
cfg = ChooseConfig(items=["a", "b", "c"], height=5)
selected = g.choose(cfg)

Styling

Pass a StyleOptions instance to any *_style parameter:

from gum import Gum, StyleOptions, BorderStyle, Align

g = Gum()
box = g.style(
    texts=["Bubble Gum (1¢)", "So sweet and so fresh!"],
    foreground="212",
    border=BorderStyle.DOUBLE,
    border_foreground="212",
    align=Align.CENTER,
    width=50,
    margin="1 2",
    padding="2 4",
)
print(box)

Environment variables

gum supports GUM_* environment variables. Pass them via the env parameter to have them apply to every call made through that instance:

g = Gum(env={"GUM_INPUT_CURSOR_FOREGROUND": "#FF0"})

Explicit flags set through config objects always take precedence over env vars.

Commands

Method gum command Returns
choose() gum choose list[str]
confirm() gum confirm bool
input() gum input str
write() gum write str
filter() gum filter list[str]
spin() gum spin str
style() gum style str
join() gum join str
format() gum format str
log() gum log None
file() gum file str
pager() gum pager None
table() gum table str

Error handling

from gum import Gum, GumNotFoundError, GumCommandError

try:
    g = Gum()
    name = g.input(placeholder="Your name")
except GumNotFoundError:
    print("gum is not installed — see https://github.com/charmbracelet/gum")
except GumCommandError as e:
    print(f"gum exited {e.returncode}: {e.stderr}")

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

gum_wrapper-0.1.0.tar.gz (13.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

gum_wrapper-0.1.0-py3-none-any.whl (17.2 kB view details)

Uploaded Python 3

File details

Details for the file gum_wrapper-0.1.0.tar.gz.

File metadata

  • Download URL: gum_wrapper-0.1.0.tar.gz
  • Upload date:
  • Size: 13.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.7

File hashes

Hashes for gum_wrapper-0.1.0.tar.gz
Algorithm Hash digest
SHA256 6054e634130a03866b1928e586f362d64655bb951edcfc88a83d68b4f5a2fc38
MD5 94fda4c1c5a3c214b2b0347bd7fd1d4e
BLAKE2b-256 880ca13b13e0468a678cc65a64c33aa06fd88ed10c18bb1458aa9651518deda3

See more details on using hashes here.

File details

Details for the file gum_wrapper-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: gum_wrapper-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 17.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.7

File hashes

Hashes for gum_wrapper-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 5a25fd322fabd1ca6b1382706ef21bc9d6ab0ebeee0677797695083f5b64faa4
MD5 092e1a9d3631ca82b2f29f9468085bc9
BLAKE2b-256 94a0b8f6d148f041c689ab96ba981bc6ef10ac7766995e8961ff3fdccfa22dd8

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page