Skip to content

ahnsv/pybus

Repository files navigation

Pybus 🚌

Type-safe, high-performance message bus for python users powered by pydantic

Use messagebus pattern without hassel

Requirements

  • Python >=3.6.2, < 3.9

Usage

# create messagebus
from pybus.default.messagebus import DefaultMessageBus

messagebus = DefaultMessageBus()

from pydantic import Field

# create messages(commands and events)
from pybus.core.message import Command, Event


class MyCommand(Command):
    name: str

class MyEvent(Event):
    name: str

# create handlers

def handle_mycommand(cmd: MyCommand):
    return cmd.name

def handle_myevent(event: MyEvent):
    print(event.name)

# add handlers to message bus
messagebus.add_handler(MyCommand, handle_mycommand)
messagebus.add_handler(MyEvent, handle_myevent)

# handle messages
cmd = MyCommand(name="humphrey")
[result] = messagebus.handle(cmd) # result = "humphrey"

event = MyEvent(name="humphrey")
messagebus.handle(event) # output: "humphrey"


# create handlers with decorator, and skip add handler part
@messagebus.subscribe(MyCommand)
def handle_mycommand(cmd: MyCommand):
    return cmd.name

@messagebus.subscribe(MyEvent)
def handle_myevent(event: MyEvent):
    print(event.name)

cmd = MyCommand(name="humphrey")
[result] = messagebus.handle(cmd) # result = "humphrey"

event = MyEvent(name="humphrey")
messagebus.handle(event) # output: "humphrey"

About

Type-safe, high-performance message bus for python users powered by pydantic

Resources

Stars

Watchers

Forks

Packages

No packages published