Skip to main content

An instrumentation tool for Python

Project description

dowhen

build readthedocs coverage pypi support-version sponsor

dowhen makes instrumentation (monkeypatch) super intuitive and maintainable with minimal overhead!

You can execute arbitrary code at specific points of your application, third-party libraries or stdlib in order to

  • debug your program
  • change the original behavior of the libraries
  • monitor your application

Installation

pip install dowhen

Usage

The core idea behind dowhen is to do a callback on a trigger. The trigger is specified with when and there are 3 kinds of callbacks.

do

do executes an arbitrary piece of code.

from dowhen import do

def f(x):
    x += 100
    # Let's change the value of x before return
    return x

# do("x = 1") is the callback
# when(f, "return x") is the trigger
# This is equivalent to:
# handler = when(f, "return x").do("x = 1")
handler = do("x = 1").when(f, "return x")
# x = 1 is executed before "return x"
assert f(0) == 1

# You can remove the handler
handler.remove()
assert f(0) == 100

bp

bp sets a breakpoint and brings up pdb.

from dowhen import bp

# bp() is another callback that brings up pdb
handler = bp().when(f, "return x")
# This will enter pdb
f(0)
# You can temporarily disable the handler
# handler.enable() will enable it again
handler.disable()

goto

goto changes the next line to execute.

from dowhen import goto

# This will skip the line of `x += 100`
# The handler will be removed after the with context
with goto("return x").when(f, "x += 100"):
    assert f(0) == 0

callback chains

from dowhen import when

# You can chain callbacks and they'll run in order at the trigger
# You don't need to store the handler if you don't use it
when(f, "x += 100").goto("return x").do("x = 42")
assert f(0) == 42

See detailed documentation at https://dowhen.readthedocs.io/

License

Copyright 2025 Tian Gao.

Distributed under the terms of the Apache 2.0 license.

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

dowhen-0.1.0.tar.gz (21.4 kB view details)

Uploaded Source

Built Distribution

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

dowhen-0.1.0-py3-none-any.whl (19.1 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: dowhen-0.1.0.tar.gz
  • Upload date:
  • Size: 21.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for dowhen-0.1.0.tar.gz
Algorithm Hash digest
SHA256 418804e52e715fd61f362c285eb0e8023819569fae85b592025d707246a1aea9
MD5 337028ed64138582b28f25c9bcaf0a33
BLAKE2b-256 381961042b0a86170158940dd9aba60ce485922a8101d762b6b50b7cd65e91d0

See more details on using hashes here.

Provenance

The following attestation bundles were made for dowhen-0.1.0.tar.gz:

Publisher: publish.yml on gaogaotiantian/dowhen

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

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

File metadata

  • Download URL: dowhen-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 19.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for dowhen-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 723a39b838ac15a2d6d3a40bfcc21b672a6f760354a00a373c53c6b23de4cfb5
MD5 41c0fbbd7ca8a93f1b278be21b6be629
BLAKE2b-256 1b5afaf4ca6fe29f3cfcc7c730245e47112d236e8f3bd3b23666975c3ddc287f

See more details on using hashes here.

Provenance

The following attestation bundles were made for dowhen-0.1.0-py3-none-any.whl:

Publisher: publish.yml on gaogaotiantian/dowhen

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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