Skip to main content

Rich-powered interactive touch REPL for introspection and debugging

Project description

touch

Rich-powered terminal “micro-debugger” for Python.

  • Inspect values with pretty, readable output.
  • Peek the source of functions/classes with highlighted snippets.
  • Wrap functions so every call prints a compact, useful trace.
  • Hot-edit functions in your editor and swap them in at runtime.
  • Open a scratch file, write code, inject it straight into your scope.

All from a tiny toolkit that plays nicely with your console.

Install

pip install hyv-touch

Python 3.9+ recommended.

TL;DR

from touch import touch, embrace


# Wrap functions for pretty call/return/exception panels:
orig = embrace(globals())         # wraps everything in this scope



# Start an interactive loop over your current environment:
# Usually you want this at the point you want to inspect. Ex. at a `except` block.
touch(globals(), locals())

# If you used embrace() once touch is done 
release(globals(), orig)          # restore originals


# ------------- [ Inside the touch REPL ] ------------- #

# Pretty value inspection:
feel({"a": 1, "b": [2, 3, 4]})
feel(some_object) # Specially useful in objects, functions and Exceptions

# Show source snippet 
source(some_function) 


# Live-edit a function in VS Code 
edit(some_function) # by default has `touch's` scope, or pass `scope=globals()` 

# Open a temp file in VS Code, write new helpers, inject into scope:
retouch()

# If changes we're made to main file or it's dependencies, you can reload with:
# This will add any new symbols to the current scope, but will not overwrite existing ones.
tickle()

var_name # will show var_name's value 
function() # will call function() 

$exec a = (1, 2, 3)  # run statements with $exec prefix or use retouch() for more complex actions

Why use this

You want quick, legible debugging without committing to a full debugger session. touch gives you:

  • Readable output (Rich panels, tables, syntax highlighting)
  • Low friction (one-liners, minimal API)
  • Reversibility (wrappers can be released, edits are temporary)
  • Hot-editing (Test and tweak without restarting or losing state)
  • Versatility (All language and state available at all times)

Editor integration

  • VS Code: requires the code CLI on PATH. In VS Code, run “Shell Command: Install ‘code’ command” from the Command Palette.
  • Other editors: set $EDITOR to your editor’s CLI. edit() and retouch() will use it when VS Code isn’t available.

Examples

run python -m touch.demo [--demo | --interactive] to see a demo script showcasing touch features.

Limits and notes

  • Builtins and C-extensions don’t have Python source to show or edit.
  • Editing nested closures can lose captured locals if you move them; keep edited functions top-level or use in-place file editing.
  • The temporary trace hook used for line breakpoints is restored after each call and won’t clobber other tracers.
  • Executing code you type or edit runs in your process. Don’t paste untrusted code.

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

hyv_touch-0.1.0.tar.gz (42.2 kB view details)

Uploaded Source

Built Distribution

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

hyv_touch-0.1.0-py3-none-any.whl (23.5 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for hyv_touch-0.1.0.tar.gz
Algorithm Hash digest
SHA256 60912325c309dfe29251acb33aeac1a019499698d9b5395b0e2fb5916615e08c
MD5 7e5e7e5033d6b16d7094cafc99295866
BLAKE2b-256 3f40561440e5969a13f69862c2e7e13993ceba4f4fd93083258f0bd41ba83e04

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for hyv_touch-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 4d56ae26fd6a41342ec053ed1d5c2550ac1afbb45b6de0e8c5530a88a8b42028
MD5 0308890bf536fa108a44ccfa9ca1197d
BLAKE2b-256 817679f3bf5930fb4990801e9566129e63fff242eda399675a26485532fa1724

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