Skip to content

Instantly share code, notes, and snippets.

@rightfold
Last active August 29, 2015 14:12
Show Gist options
  • Save rightfold/2cd0fd084390e7dd32bd to your computer and use it in GitHub Desktop.
Save rightfold/2cd0fd084390e7dd32bd to your computer and use it in GitHub Desktop.
class EventDispatcher:
def __init__(self):
self._handlers = defaultdict(set)
def handle(self, type, handler):
self._handlers[type].add(handler)
def send_event(self, event):
for handler in self._handlers[type(event)]:
handler(event)
from events import EventDispatcher
from users import UserCreated, insert_user
event_dispatcher = EventDispatcher()
event_dispatcher.handle(UserCreated, lambda id: print('created user {}'.format(id)))
event_dispatcher.handle(UserCreated, lambda id: send_password_to_user(id))
insert_user(event_dispatcher, db, User(...))
class UserCreated:
def __init__(self, user_id):
self.user_id = user_id
def insert_user(event_dispatcher, db, user):
user_id = db.execute(...)
event_dispatcher.send_event(UserCreated(user_id))
return user_id
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment