Platform 03 · Study guide
Decouple side effects (emails, audits, cache busts) from core request code using a sync event bus.
No extra package. Import from tpy.events anywhere (service layer is typical).
from tpy.events import Event, Listener, EventDispatcher
class OrderPlaced(Event):
def __init__(self, order_id: str) -> None:
super().__init__()
self.order_id = order_id
class LogOrder(Listener):
def handle(self, event: Event) -> None:
assert isinstance(event, OrderPlaced)
print("order", event.order_id)
bus = EventDispatcher()
bus.listen(OrderPlaced, LogOrder())
bus.listen(OrderPlaced, lambda e: print("also", e.order_id))
bus.dispatch(OrderPlaced("ord_1"))
Event subclass carrying payload fields.listen(EventType, listener).dispatch runs typed listeners in order, then wildcard "*" listeners.event.stop() inside a listener to halt remaining typed listeners.| API | Use when |
|---|---|
listen | Register class or callable |
dispatch | Notify all listeners |
dispatch_until | Stop at first non-None return |
forget | Clear listeners for a type |