Skip to content

Instantly share code, notes, and snippets.

@whardier
Created July 2, 2020 23:15
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save whardier/e8367aaa955b91cf19820d4f3779f52c to your computer and use it in GitHub Desktop.
Save whardier/e8367aaa955b91cf19820d4f3779f52c to your computer and use it in GitHub Desktop.
#!/usr/bin/env python3.8
import sys
from collections import Counter
root = sys.modules[__name__]
events = [
{"monkey": "Sam", "state": "hungry", "kind": "banana" },
{"monkey": "Chet", "state": "flinging", "kind": "grass" },
{"monkey": "Sam", "state": "flinging", "kind": "grass" },
{"monkey": "Sam", "state": "hungry", "kind": "banana" },
{"monkey": "Chet", "state": "hungry", "kind": "banana" },
{"monkey": "Chet", "state": "flinging", "kind": "feces" },
{"monkey": "Sam", "state": "flinging", "kind": "grass" },
{"monkey": "Sam", "state": "hungry", "kind": "apple" },
]
event_counters = {}
def do_monkey_flinging(event):
print(f"{event['monkey']}:\tdo_monkey_flinging")
def do_monkey_hungry_apple(event):
print(f"{event['monkey']}:\tdo_monkey_hungry_apple")
def do_monkey_hungry_banana_1(event):
print(f"{event['monkey']}:\tdo_monkey_hungry_banana_1")
def dispatch_event(event):
# Make sure each monkey has their own event counter
event_counters.setdefault(event["monkey"], Counter())
event_counter = event_counters[event["monkey"]]
# Compose an event name based on the state and kind values of the event
event_name = f"{event['state']}_{event['kind']}"
# Update counter
event_counter.update([event_name])
event_count = event_counter[event_name]
# Pass along a useful tidbit if needed
event['_count'] = event_count
callback = None
callback = getattr(root, f"do_monkey_{event['state']}", callback)
callback = getattr(root, f"do_monkey_{event['state']}_{event['kind']}", callback)
callback = getattr(root, f"do_monkey_{event['state']}_{event['kind']}_{event_count}", callback)
if callback:
callback(event)
for event in events:
dispatch_event(event)
Sam: do_monkey_hungry_banana_1
Chet: do_monkey_flinging
Sam: do_monkey_flinging
Chet: do_monkey_hungry_banana_1
Chet: do_monkey_flinging
Sam: do_monkey_flinging
Sam: do_monkey_hungry_apple
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment