Types in add_handler

 avatar
unknown
python
2 years ago
919 B
6
Indexable
@dataclass(frozen=True)
class BundlePurchased(Event):
    user_id: UserID
    code: str


@dataclass(frozen=True)
class BundleRegistred(Event):
    bundle_id: BundleID
    user_id: UserID


class EventBus:
    def __init__(self):
        self.handlers: DefaultDict[Type[Event], List[EventHandler]] = defaultdict(list)

    def add_handler(self, event: Type[Event], handler: EventHandler):
        self.handlers[event].append(handler)

    def publish(self, event: Event):
        handlers = self.handlers[event.__class__]
        for handler in handlers:
            handler(event)


event_bus = EventBus()


def bundle_purchased_handler(event: BundlePurchased) -> None:
    ...


def bundle_registred_handler(event: BundleRegistred) -> None:
    ...


event_bus.add_handler(BundlePurchased, bundle_purchased_handler)
event_bus.add_handler(BundleRegistred, bundle_registred_handler)
Editor is loading...