MCPcopy
hub / github.com/PokemonGoF/PokemonGo-Bot / EventManager

Class EventManager

pokemongo_bot/event_manager.py:24–77  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

22
23
24class EventManager(object):
25
26 def __init__(self, limit_output=False, *handlers):
27 self._registered_events = dict()
28 self._handlers = list(handlers) or []
29 self._last_event = None
30 self._limit_output = limit_output
31
32 def event_report(self):
33 for event, parameters in self._registered_events.iteritems():
34 print('-'*80)
35 print('Event: {}'.format(event))
36 if parameters:
37 print('Parameters:')
38 for parameter in parameters:
39 print('* {}'.format(parameter))
40
41 def add_handler(self, event_handler):
42 self._handlers.append(event_handler)
43
44 def register_event(self, name, parameters=[]):
45 self._registered_events[name] = parameters
46
47 def emit(self, event, sender=None, level='info', formatted='', data={}):
48 if not sender:
49 raise ArgumentError('Event needs a sender!')
50
51 levels = ['info', 'warning', 'error', 'critical', 'debug']
52 if not level in levels:
53 raise ArgumentError('Event level needs to be in: {}'.format(levels))
54
55 if event not in self._registered_events:
56 raise EventNotRegisteredException("Event %s not registered..." % event)
57
58 if self._limit_output:
59 if (event == self._last_event) and (event in ["moving_to_fort", "moving_to_lured_fort", "position_update", "moving_to_hunter_target"]):
60 stdout.write("\033[1A\033[0K\r")
61 stdout.flush()
62
63 if level == "info" and formatted:
64 self._last_event = event
65
66 # verify params match event
67 parameters = self._registered_events[event]
68 if parameters:
69 for k, v in data.iteritems():
70 if k not in parameters:
71 raise EventMalformedException("Event %s does not require parameter %s" % (event, k))
72
73 formatted_msg = formatted.format(**data)
74
75 # send off to the handlers
76 for handler in self._handlers:
77 handler.handle_event(event, sender, level, formatted_msg, data)

Callers 2

__init__Method · 0.90
_setup_event_systemMethod · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected