Skip to main content

A Python framework for building event-driven applications with a clean publisher-subscriber pattern implementation.

Project description

EventsPype

CI codecov Python 3.13+ PyPI License: MIT Docs

A lightweight, type-safe Python framework for building event-driven applications. EventsPype provides a clean publisher-subscriber pattern implementation with support for multiple event types, async waiting, message brokers, and architecture visualization.

Features

  • 🎯 Type-Safe Events: Runtime type checking ensures events match their declared publication class
  • 🔄 Multi-Publisher/Subscriber: Handle multiple event types with MultiPublisher and MultiSubscriber
  • 🚀 Async Support: Await specific event types with TrackingEventSubscriber.wait_for()
  • 🔌 Message Brokers: Swap between in-process (LocalBroker) and Redis (RedisBroker) dispatch
  • 🛠️ Functional Subscribers: Register plain callbacks without subclassing
  • 📊 Tracking & Reporting: Built-in subscribers for testing and structured logging
  • 🖼️ Architecture Visualization: Generate graphviz diagrams of your event system
  • 🔒 Memory Safe: Weak references prevent lapsed subscriber memory leaks
  • 🧪 Well Tested: Comprehensive test suite with high coverage

Installation

# Using pip
pip install eventspype

# Using uv
uv add eventspype

Quick Start

from dataclasses import dataclass
from eventspype import EventPublisher, EventPublication, EventSubscriber

# Define an event type
@dataclass
class UserCreatedEvent:
    user_id: int
    username: str

# Create a publication and publisher
publication = EventPublication("user_created", UserCreatedEvent)
publisher = EventPublisher(publication)

# Create a subscriber
class UserHandler(EventSubscriber):
    def call(self, event, event_tag, caller):
        print(f"User created: {event.username} (ID: {event.user_id})")

# Subscribe and publish
handler = UserHandler()
publisher.add_subscriber(handler)
publisher.publish(UserCreatedEvent(user_id=1, username="alice"))

Core Components

  • Events: Any Python object; Event is an optional base class. EventTag accepts enums, ints, or strings.

    • Event: Optional marker base class for event types
    • EventTag: Type alias for Enum | int | str
  • Publishers: Dispatch events to registered subscribers

    • EventPublisher: Single-publication publisher with weak-reference subscriber management
    • MultiPublisher: Multi-publication publisher; define EventPublication attributes as class variables
  • Subscribers: Receive and handle events

    • EventSubscriber: Abstract base class; override call(event, event_tag, caller)
    • OwnedEventSubscriber: Subscriber that holds a reference to an owner object
    • FunctionalEventSubscriber: Wraps a plain callable as a subscriber
    • MultiSubscriber: Define EventSubscription class attributes for declarative wiring
  • Subscriptions: Declarative wiring between publishers and subscribers

    • EventSubscription: Connects a MultiSubscriber method to a publisher's event tag
    • PublicationSubscription: Typed variant that wires directly to an EventPublication
  • Brokers: Pluggable event transport layer

    • MessageBroker: Abstract base class
    • LocalBroker: In-process dispatch (default behavior)
    • RedisBroker: Cross-process dispatch via Redis Pub/Sub
  • Utilities

    • TrackingEventSubscriber: Collects events and supports await wait_for(EventType)
    • ReportingEventSubscriber: Logs events via Python's logging module
    • EventVisualizer: Generates graphviz architecture diagrams

Documentation

Full documentation is available at gianlucapagliara.github.io/eventspype.

Development

EventsPype uses uv for dependency management and packaging:

# Install dependencies
uv sync

# Run tests
uv run pytest

# Run type checks
uv run mypy eventspype

# Run linting
uv run ruff check .

# Run pre-commit hooks
uv run pre-commit run --all-files

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

eventspype-1.2.0.tar.gz (98.9 kB view details)

Uploaded Source

Built Distribution

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

eventspype-1.2.0-py3-none-any.whl (23.5 kB view details)

Uploaded Python 3

File details

Details for the file eventspype-1.2.0.tar.gz.

File metadata

  • Download URL: eventspype-1.2.0.tar.gz
  • Upload date:
  • Size: 98.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.12 {"installer":{"name":"uv","version":"0.10.12","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for eventspype-1.2.0.tar.gz
Algorithm Hash digest
SHA256 52c5b043029dbd725df3a9eddf7c6fdb2b8cbf74209a9c617b7b48a75a9bf69f
MD5 ac29fd2ad9a60fbf115d50cc5c509908
BLAKE2b-256 c3fe22b202d50694f7bd6ea525237c8e08151d7db8788e0c1ac308da8cf5c41f

See more details on using hashes here.

File details

Details for the file eventspype-1.2.0-py3-none-any.whl.

File metadata

  • Download URL: eventspype-1.2.0-py3-none-any.whl
  • Upload date:
  • Size: 23.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.12 {"installer":{"name":"uv","version":"0.10.12","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for eventspype-1.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 c0fb74b41cdf9b96369f5ddb16719c0098f30ee566c12ee63ec11dd60a70da28
MD5 b2e87c7fe76f7c43cfc275f5802dbbec
BLAKE2b-256 d88b27b64ac980b3f83c2660110bed654f14890cd4eb109cc898a294da180889

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