Skip to content

Instantly share code, notes, and snippets.

@iruwl
Created May 25, 2024 06:19
Show Gist options
  • Save iruwl/10b5872d145b80228917e6ca48c9fb8d to your computer and use it in GitHub Desktop.
Save iruwl/10b5872d145b80228917e6ca48c9fb8d to your computer and use it in GitHub Desktop.
python events
events = {}
def register_event(event: str, fn: callable):
if not event in events:
events[event] = []
events[event].append(fn)
def dispatch(event: str, *args, **kwargs):
if not event in events:
raise ValueError("event %s is not registered!" % event)
handlers = events[event]
for fn in handlers:
fn(*args, **kwargs)
import functools
from lib_event import register_event, dispatch
users = {}
def send_email(user):
print("email has been sent to %s" % user["email"])
def notify(msg, user):
print("%s: %s" % (msg, user))
def create_user(name):
if name in users:
print("user %s already created!" % name)
return
user = {"name": name, "email": name + "@python.org", "password": "123"}
users[name] = user
dispatch("user_created", user)
def change_password(name, password):
if name not in users:
print("user %s not found!" % name)
return
user = users[name]
user["password"] = password
dispatch("password_changed", user)
def main():
print("> create user")
create_user("irul")
print("> create user")
create_user("jaka")
print("> create user")
create_user("irul")
print("> change password")
change_password("jaka", "456")
print("> all users")
for name in users:
print(users[name])
if __name__ == '__main__':
register_event("user_created", functools.partial(notify, "user successfuly created"))
register_event("user_created", send_email)
register_event("password_changed", functools.partial(notify, "password successfuly changed"))
register_event("password_changed", send_email)
main()
@iruwl
Copy link
Author

iruwl commented May 25, 2024

Result:

> create user
user successfuly created: {'name': 'irul', 'email': 'irul@python.org', 'password': '123'}
email has been sent to irul@python.org
> create user
user successfuly created: {'name': 'jaka', 'email': 'jaka@python.org', 'password': '123'}
email has been sent to jaka@python.org
> create user
user irul already created!
> change password
password successfuly changed: {'name': 'jaka', 'email': 'jaka@python.org', 'password': '456'}
email has been sent to jaka@python.org
> all users
{'name': 'irul', 'email': 'irul@python.org', 'password': '123'}
{'name': 'jaka', 'email': 'jaka@python.org', 'password': '456'}


** Process exited - Return Code: 0 **
Press Enter to exit terminal

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment