A toolkit for emitting and handling events, following the CloudEvent spec.
Project description
eventkit-py
A toolkit for emitting and handling events, following the CloudEvent spec.
Installation
poetry add outcome-eventkit
Usage
It's a good idea to be familiar with the CloudEvent v1.0 spec before using this library.
The library implements the following (but is extensible):
Event Example
from outcome.eventkit import CloudEvent, CloudEventData
from outcome.eventkit.formats.json import JSONCloudEventFormat
from outcome.eventkit.protocol_bindings.http import StructuredHTTPBinding, BinaryHTTPBinding
import requests
# Create a payload, specifying how it will be encoded
data = CloudEventData(
data_content_type='application/json',
data={
'hello': 'world'
}
)
# Create an event
event = CloudEvent(type='co.outcome.events.sample', source='example', data=data)
# Create a JSON representation of the event
serialised_event = JSONCloudEventFormat.encode(event)
# Or...
# Create a HTTP message with the event
http_message = BinaryHTTPBinding.to_http(event)
# Or...
# Create a structured HTTP message with the event and a JSON formatter
http_message = StructuredHTTPBinding.to_http(event, JSONCloudEventFormat)
# Post the event somewhere...
requests.post('http://example.org', headers=http_message.headers, data=http_message.body)
Dispatch Example
from outcome.eventkit import dispatch, CloudEvent
# You can register event handlers that will be called
# when a corresponding event is dispatched
# Explicitly
def my_event_handler(event: CloudEvent) -> None:
...
# Register a handler for an event type
dispatch.register_handler('co.outcome.event', my_event_handler)
# Or via a decorator
@dispatch.handles_events('co.outcome.event', 'co.outcome.other-event')
def my_other_handler(event: CloudEvent) -> None:
...
# Then notify all registered handlers of an event
ev = CloudEvent(type='co.outcome.event', source='example')
dispatch.dispatch(ev)
By default, all handlers are stored in a single registry, but you can provide your own registry to the register_handler
/handles_events
/dispatch
methods with the registry
keyword argument.
from outcome.eventkit import dispatch
from collections import defaultdict
my_registry: dispatch.CloudEventHandlerRegistry = defaultdict(list)
@dispatch.handles_events('co.outcome.event', registry=my_registry)
def my_handler(event: CloudEvent) -> None:
...
ev = CloudEvent(type='co.outcome.event', source='example')
dispatch.dispatch(ev, registry=my_registry)
Development
Remember to run ./pre-commit.sh
when you clone the repository.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file outcome-eventkit-0.2.15.tar.gz
.
File metadata
- Download URL: outcome-eventkit-0.2.15.tar.gz
- Upload date:
- Size: 11.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.1.4 CPython/3.8.6 Linux/5.4.0-1032-azure
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ef99ca30156cbebcb99944ff70e3f76463604f47ad08837ef94892d41ccc86d2 |
|
MD5 | 426c45f14ba70c970060b1d58ef71c23 |
|
BLAKE2b-256 | ac40ed70b23a5fb7b9e4f9996fcd0d0499784da1731844c85829e361213ad4c8 |
File details
Details for the file outcome_eventkit-0.2.15-py3-none-any.whl
.
File metadata
- Download URL: outcome_eventkit-0.2.15-py3-none-any.whl
- Upload date:
- Size: 14.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.1.4 CPython/3.8.6 Linux/5.4.0-1032-azure
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 76d5ee648a0786f2714458df86bfcb26af03d30bbc735ffe50355ab8ec7a4536 |
|
MD5 | 7fb0b0c486e8038dd4f01b21191fb351 |
|
BLAKE2b-256 | 654a8b905e6ec81e52223a7a733bdfbf235e92d59ddbae792740a4e2dd4b78b6 |