Sign inDemoInstall


Package Overview
File Explorer

Install Socket

Detect and block malicious and high-risk dependencies



minimalist event system




Build Status Code style: black

pyobservable is a minimalist event system for python. It provides you an easy-to-use interface to trigger arbitrary functions when specific events occur.

from observable import Observable

obs = Observable()

def error_handler(message):
    # do some fancy error handling
    logging.error(f"An error occured: {message}")


def do_time_travel():
    # do some time traveling
    if year != 1291:
        obs.trigger("error", "Time travel to 1291 didn't work")

Note: We are Python 3 only! Only Python Versions >= 3.5 are supported. Use v0.3.2 for older Python Versions.

How to use

Use a pip to install it from PyPI:

pip install observable

After completion you can start using observable:

from observable import Observable

obs = Observable()


on: Register event handler with on

There are two ways to register a function to an event.
The first way is to register the event with a decorator like this:

def error_func(message):
    print("Error: %s" % message)

The second way is to register it with a method call:

def error_func(message):
    print("Error: %s" % message)
obs.on("error", error_func)

once: Register event handler with once

once works like on, but once the event handler is triggered it will be removed and cannot be triggered again.

trigger: trigger event

You can trigger a registered event with the trigger method:

obs.trigger("error", "This is my error message")

If no handler for the event error could be found an Observable.NoHandlerFound-Exception will be raised.

off: remove handler and events

Remove a handler from a specified event:"error", error_func)"error", [error_func, second_error_func])

Remove all handlers from a specified event:"error")

Clear all events:

get_all_handlers, get_handlers and is_registered: Check which handlers are registered

Imagine you registered the following handlers:

def success_func():

def error_func(message):
    print("Error: %s" % message)

Then you can do the following to inspect the registered handlers:

>>> obs.get_all_handlers()
{'success': [<function success_func at 0x7f7f32d0a1e0>], 'error': [<function error_func at 0x7f7f32d0a268>]}
>>> obs.get_handlers("success")
[<function success_func at 0x7f7f32d0a1e0>]
>>> obs.get_handlers("other_event")

This project is published under MIT.
A Timo Furrer project.
- :tada: -


Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.


Related posts

SocketSocket SOC 2 Logo


  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.

  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc