observable

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()
@obs.on("error")
def error_handler(message):
logging.error(f"An error occured: {message}")
...
def do_time_travel():
...
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()
Usage
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:
@obs.on("error")
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:
obs.off("error", error_func)
obs.off("error", [error_func, second_error_func])
Remove all handlers from a specified event:
obs.off("error")
Clear all events:
obs.off()
get_all_handlers
, get_handlers
and is_registered
: Check which handlers are registered
Imagine you registered the following handlers:
@obs.on("success")
def success_func():
print("Success!")
@obs.on("error")
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: -