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-1.0.0.tar.gz (11.3 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-1.0.0-py3-none-any.whl (13.9 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for gum_wrapper-1.0.0.tar.gz
Algorithm Hash digest
SHA256 97a7cf4e5b5c056033eb7e27bef39ac906bf4895d093ec9beba2e1b32eb34b07
MD5 d3f2d97e0d59a02b76e105fe7bde6da6
BLAKE2b-256 e2508051abb5d529a992bd5f7521193aaf99ac2d3051f008e307d6f2d7c1f832

See more details on using hashes here.

File details

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

File metadata

  • Download URL: gum_wrapper-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 13.9 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-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 379614e27e8cbd1684834ac96950df06a5a647ba24362f56816f5b31973bcfde
MD5 80a916ba77372a6dc880f515e45fb620
BLAKE2b-256 71fc40af9e8e13baed17435f4816ae7811b91331dd397082f214e641a5618bf0

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