topical
Topical is a simple eventing library written in Python.
Table of Contents
Developer Requirements
- Python 3.7 or higher
Installation
pip install ap-topical
Usage
Topical supports both synchronous and asynchronous callbacks. This documentation only details the async/await calls. For more in-depth usage instructions, please consult the wiki.
First, you will need an event handler. This function requires a payload object as its only parameter:
async def event_handler_one(payload):
pass
async def event_handler_two(payload):
pass
Next, you will need to configure your event pipeline.
topical.subscribe('event-one', event_handler_one)
topical.subscribe('event-two', event_handler_two)
Next, you will need to publish your first event.
payload = TopicalEventPayload()
await topical.publish_async('event-one', payload)
To continue your event chain, you will need to publish an event from an existing event handler:
async def event_handler_one(payload):
# do something with your event payload
await topical.publish_async('event_two', payload)
Small Example
import asyncio
from ap.topical import topical
from ap.topical.topical_event_payload import TopicalEventPayload
async def event_handler_one(payload):
print(f'inside event_handler_one for {payload.idempotency_token}')
print('sleeping for 5 seconds')
await asyncio.sleep(5)
await topical.publish_async('event-two', payload)
async def event_handler_two(payload):
print(f'inside event_handler_two for {payload.idempotency_token}')
print('sleeping for 5 seconds')
await asyncio.sleep(5)
print('done!')
async def main():
topical.subscribe('event-one', event_handler_one)
topical.subscribe('event-two', event_handler_two)
payloads = [TopicalEventPayload() for _ in range(3)]
await asyncio.gather(*[topical.publish_async('event-one', payload) for payload in payloads])
asyncio.run(main())
# Output
# (topical) λ python info.py
# inside event_handler_one for 3744628e-fb1c-4c60-a43a-175b1a09b0fd
# sleeping for 5 seconds
# inside event_handler_one for 64a546dc-46fd-4c23-9adc-501194376ea6
# sleeping for 5 seconds
# inside event_handler_one for b470535f-f65a-4c22-b764-6fe8379a0388
# sleeping for 5 seconds
# inside event_handler_two for 3744628e-fb1c-4c60-a43a-175b1a09b0fd
# sleeping for 5 seconds
# inside event_handler_two for 64a546dc-46fd-4c23-9adc-501194376ea6
# sleeping for 5 seconds
# inside event_handler_two for b470535f-f65a-4c22-b764-6fe8379a0388
# sleeping for 5 seconds
# done!
# done!
# done!
Using the Event Decorator
Manually subscribing to a lot of events could be an issue. Topical ships with a decorator that allows you to decorate any function as an event handler.
import asyncio
from ap.topical import topical
@topical.event('event-one')
async def event_handler_one(payload):
print('in event handler')
async def main():
await asyncio.gather(*[topical.publish_async('event-one', {}) for _ in range(3)])
asyncio.run(main())
# Output
# (topical) λ python info.py
# in event handler
# in event handler
# in event handler
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ap_topical-0.2.0-py3-none-any.whl.
File metadata
- Download URL: ap_topical-0.2.0-py3-none-any.whl
- Upload date:
- Size: 6.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.45.0 CPython/3.7.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c028be6e7eb5a67df6748388894eb47f02ee3a1a9688ce5ab7e7cc87c32f0e20
|
|
| MD5 |
2b0ca535c08f361406a894d19dc1d893
|
|
| BLAKE2b-256 |
0fcc903cfa13a0f5fe4e08ec602006902f8d1ddbde537098b515bc9932d13d53
|