Skip to content

Instantly share code, notes, and snippets.

@whardier
Last active July 2, 2020 23:01
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/0a688f118e1d05a1ac731cf4ffbf10e4 to your computer and use it in GitHub Desktop.
Save whardier/0a688f118e1d05a1ac731cf4ffbf10e4 to your computer and use it in GitHub Desktop.
#!/usr/bin/env python3.8
from collections import Counter
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(event):
if event['_count'] == 1:
print(f"{event['monkey']}:\tdo_monkey_hungry_banana")
else:
print(f"{event['monkey']}:\tdont_do_monkey_hungry_banana")
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']}"
event_counter.update([event_name])
event_count = event_counter[event_name]
event['_count'] = event_count
if event["state"] == "hungry":
if event["kind"] == "banana":
do_monkey_hungry_banana(event)
if event["kind"] == "apple":
do_monkey_hungry_apple(event)
elif event["state"] == "flinging":
do_monkey_flinging(event)
for event in events:
dispatch_event(event)
Sam: do_monkey_hungry_banana
Chet: do_monkey_flinging
Sam: do_monkey_flinging
Sam: dont_do_monkey_hungry_banana
Chet: do_monkey_hungry_banana
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