Pyventus
Pyventus is a modern and robust Python library for event-driven and reactive programming. It provides a comprehensive suite of tools to define, emit, manage, and orchestrate events with ease, using customizable event emitters and flexible responses. The current version is 0.8.0. The library is actively maintained with a regular release cadence, ensuring ongoing compatibility and feature enhancements.
Warnings
- breaking Breaking change in v0.7.0: All event-driven features (e.g., `EventEmitter`, `EventLinker`) must now be imported from `pyventus.events` instead of directly from the top-level `pyventus` package.
- breaking Breaking change in v0.5.0: The base `Event` class was removed due to improved event semantics and redundancy. Custom event classes no longer need to inherit from a base `Event` class.
- breaking Breaking change in v0.5.0: Several methods of `EventLinker` were renamed. For example, `get_event_registry()` was renamed to `get_registry()`, and `get_events_by_handler()` was renamed to `get_events_by_event_handler()` (later `get_events_from_subscribers()` in closely related updates).
- breaking Breaking change in v0.3.0: The internal `_execute()` method of `EventEmitter` was renamed to `_process()`. Additionally, all debug flags were renamed from `debug_mode` to `debug` for consistency.
- gotcha The `typing-extensions` package became a required dependency from v0.7.0 onwards to support advanced typing features. If you encounter `ModuleNotFoundError` related to `typing_extensions`, it might be missing.
Install
-
pip install pyventus
Imports
- EventEmitter
from pyventus import EventEmitter
from pyventus.events import EventEmitter
- EventLinker
from pyventus import EventLinker
from pyventus.events import EventLinker
- AsyncIOEventEmitter
from pyventus import AsyncIOEventEmitter
from pyventus.events import AsyncIOEventEmitter
Quickstart
from pyventus.events import AsyncIOEventEmitter, EventEmitter, EventLinker
# Define an event handler using the EventLinker decorator
@EventLinker.on("GreetEvent")
def handle_greet_event():
print("Hello, World!")
# Create an event emitter instance
event_emitter: EventEmitter = AsyncIOEventEmitter()
# Emit the custom event, triggering the handler
event_emitter.emit("GreetEvent")