Refactor and cleanup Processor
This commit is contained in:
parent
3f468878af
commit
bbc122a0f2
1 changed files with 23 additions and 21 deletions
|
@ -119,7 +119,6 @@ class EventHandler(Dependant):
|
||||||
|
|
||||||
:param handler_map: the mapping from event name to handling method
|
:param handler_map: the mapping from event name to handling method
|
||||||
"""
|
"""
|
||||||
print(f'{self.__class__.__name__}.**kwargs={kwargs}')
|
|
||||||
assert handler_map is not None and len(handler_map) > 0, f'empty map: {handler_map}'
|
assert handler_map is not None and len(handler_map) > 0, f'empty map: {handler_map}'
|
||||||
self._handler_map = handler_map
|
self._handler_map = handler_map
|
||||||
self.processor = None
|
self.processor = None
|
||||||
|
@ -244,18 +243,12 @@ class Processor():
|
||||||
:param handlers: the `EventHandler`s to use for processing
|
:param handlers: the `EventHandler`s to use for processing
|
||||||
:param kwargs: the parameters to pass on to new handlers
|
:param kwargs: the parameters to pass on to new handlers
|
||||||
"""
|
"""
|
||||||
print('handlers before:', [type(handler).__name__ for handler in handlers])
|
expanded_handlers = self._expand_dependencies(*handlers, **kwargs)
|
||||||
self._handlers = self._expand_dependencies(*handlers, **kwargs)
|
self._handler_multimap = self._get_handler_maps(expanded_handlers)
|
||||||
print('handlers after:', [type(handler).__name__ for handler in self._handlers])
|
self._register_with_handlers(expanded_handlers)
|
||||||
self._register_with_handlers()
|
|
||||||
|
|
||||||
def _register_with_handlers(self) -> None:
|
|
||||||
"""Register this processor with its `EventHandler`s."""
|
|
||||||
for handler in self._handlers:
|
|
||||||
handler.register_processor(self)
|
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
def _expand_dependencies(
|
def _expand_dependencies(
|
||||||
self,
|
|
||||||
*handlers: EventHandler,
|
*handlers: EventHandler,
|
||||||
**kwargs,
|
**kwargs,
|
||||||
) -> List[EventHandler]:
|
) -> List[EventHandler]:
|
||||||
|
@ -267,40 +260,49 @@ class Processor():
|
||||||
"""
|
"""
|
||||||
return DependencySolver(*handlers, **kwargs).solve()
|
return DependencySolver(*handlers, **kwargs).solve()
|
||||||
|
|
||||||
def _get_handler_maps(self) -> HandlerMultimap:
|
@staticmethod
|
||||||
|
def _get_handler_maps(
|
||||||
|
handlers: List[EventHandler],
|
||||||
|
) -> HandlerMultimap:
|
||||||
"""
|
"""
|
||||||
Collect and merge `HandlerMap`s from all events handlers into a `HandlerMultimap`.
|
Collect and merge `HandlerMap`s from all events handlers into a `HandlerMultimap`.
|
||||||
|
|
||||||
|
:param handlers: the list of handlers
|
||||||
:return: the merged multimap
|
:return: the merged multimap
|
||||||
"""
|
"""
|
||||||
handler_multimap = defaultdict(list)
|
handler_multimap = defaultdict(list)
|
||||||
for handler in self._handlers:
|
for handler in handlers:
|
||||||
handler_map = handler.handler_map
|
for event_name, handler in handler.handler_map.items():
|
||||||
print(f'{handler}:: {handler_map}')
|
|
||||||
for event_name, handler in handler_map.items():
|
|
||||||
handler_multimap[event_name].append(handler)
|
handler_multimap[event_name].append(handler)
|
||||||
return handler_multimap
|
return handler_multimap
|
||||||
|
|
||||||
|
def _register_with_handlers(
|
||||||
|
self,
|
||||||
|
handlers: List[EventHandler],
|
||||||
|
) -> None:
|
||||||
|
"""
|
||||||
|
Register this processor with its `EventHandler`s.
|
||||||
|
|
||||||
|
:param handlers: the list of handlers
|
||||||
|
"""
|
||||||
|
for handler in handlers:
|
||||||
|
handler.register_processor(self)
|
||||||
|
|
||||||
def process(self, events: List[DictEvent]) -> None:
|
def process(self, events: List[DictEvent]) -> None:
|
||||||
"""
|
"""
|
||||||
Process all events.
|
Process all events.
|
||||||
|
|
||||||
:param events: the events to process
|
:param events: the events to process
|
||||||
"""
|
"""
|
||||||
self._handler_multimap = self._get_handler_maps()
|
|
||||||
print(f'multimap: {self._handler_multimap}')
|
|
||||||
for event in events:
|
for event in events:
|
||||||
self._process_event(event)
|
self._process_event(event)
|
||||||
|
|
||||||
def _process_event(self, event: DictEvent) -> None:
|
def _process_event(self, event: DictEvent) -> None:
|
||||||
"""Process a single event."""
|
"""Process a single event."""
|
||||||
event_name = get_event_name(event)
|
event_name = get_event_name(event)
|
||||||
print(f'event name: {event_name}')
|
|
||||||
handler_functions = self._handler_multimap.get(event_name, None)
|
handler_functions = self._handler_multimap.get(event_name, None)
|
||||||
if handler_functions is not None:
|
if handler_functions is not None:
|
||||||
print(f'\thandler functions: {handler_functions}')
|
|
||||||
for handler_function in handler_functions:
|
for handler_function in handler_functions:
|
||||||
print(f'\t\thandler function: {handler_function}')
|
|
||||||
timestamp = get_field(event, '_timestamp')
|
timestamp = get_field(event, '_timestamp')
|
||||||
cpu_id = get_field(event, 'cpu_id')
|
cpu_id = get_field(event, 'cpu_id')
|
||||||
# TODO perhaps validate fields depending on the type of event,
|
# TODO perhaps validate fields depending on the type of event,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue