https://github.com/nricciardi/py-busline
Agnostic eventbus for Python
https://github.com/nricciardi/py-busline
Last synced: 6 months ago
JSON representation
Agnostic eventbus for Python
- Host: GitHub
- URL: https://github.com/nricciardi/py-busline
- Owner: nricciardi
- License: gpl-3.0
- Created: 2024-11-17T17:57:53.000Z (7 months ago)
- Default Branch: main
- Last Pushed: 2024-12-04T19:14:25.000Z (6 months ago)
- Last Synced: 2024-12-04T19:35:52.379Z (6 months ago)
- Language: Python
- Homepage: https://pypi.org/project/busline/
- Size: 57.6 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
> [!IMPORTANT]
> Migrate to [Orbitalis framework](https://github.com/orbitalis-framework/py-busline)# Busline for Python
Agnostic eventbus for Python.
Official eventbus library for [Orbitalis](https://github.com/orbicore/orbitalis)
## Local EventBus
### Using Publisher/Subscriber
```python
from busline.eventbus.async_local_eventbus import AsyncLocalEventBus
from busline.eventbus_client.publisher.local_eventbus_publisher import LocalEventBusPublisher
from busline.event.event import Event
from busline.eventbus_client.subscriber.local_eventbus_closure_subscriber import LocalEventBusClosureSubscriberlocal_eventbus_instance = AsyncLocalEventBus() # singleton
def callback(topic_name: str, event: Event):
print(event)subscriber = LocalEventBusClosureSubscriber(local_eventbus_instance, callback)
publisher = LocalEventBusPublisher(local_eventbus_instance)await subscriber.subscribe("test-topic")
await publisher.publish("test-topic", Event()) # publish empty event
```### Using EventBusClient
```python
from busline.event.event import Event
from busline.eventbus_client.local_eventbus_client import LocalEventBusClientdef callback(topic_name: str, event: Event):
print(event)client = LocalEventBusClient(callback)
await client.subscribe("test")
await client.publish("test", Event())
```## Create Agnostic EventBus
Implement business logic of your `Publisher` and `Subscriber` and... done. Nothing more.
```python
from busline.event.event import Event
from busline.eventbus_client.publisher.publisher import Publisherclass YourEventBusPublisher(Publisher):
async def _internal_publish(self, topic_name: str, event: Event, **kwargs):
pass # send events to your eventbus (maybe in cloud?)
``````python
from busline.eventbus_client.subscriber.subscriber import Subscriber
from busline.event.event import Eventclass YourEventBusSubscriber(Subscriber):
async def on_event(self, topic_name: str, event: Event, **kwargs):
pass # receive your events
```You could create a client to allow components to use it instead of become a publisher or subscriber.
```python
from busline.eventbus_client.eventbus_client import EventBusClient
from busline.event.event import Eventdef client_callback(topic_name: str, e: Event):
print(e)subscriber = YourEventBusSubscriber(...)
publisher = YourEventBusPublisher(...)client = EventBusClient(publisher, subscriber, ClosureEventListener(client_callback))
```