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.3.0.tar.gz (11.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.3.0-py3-none-any.whl (14.3 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: gum_wrapper-0.3.0.tar.gz
  • Upload date:
  • Size: 11.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.3.0.tar.gz
Algorithm Hash digest
SHA256 8d4427571a850e5da96ff7ff3b917b404bb402cd85df5f97bf6ade3b8c47c171
MD5 9d59b1b3cc211a62269da0f2e5285b4c
BLAKE2b-256 d0574a604b63c807d0c2c08bd7692d1bed742b3d0369341f6372bebb2b412068

See more details on using hashes here.

File details

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

File metadata

  • Download URL: gum_wrapper-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 14.3 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.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 83f68bd9ee9b547c41672ef186099024e5f685dfa9cb6ea7141cc3af6411a594
MD5 b12edff7dbc6522b5a9578a425807710
BLAKE2b-256 e2f67bba176a59448d0f31ccf419deb51c45cd759648cc2c025ad35800945d31

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