Add 'quiet' option for Processor to not print any output

Signed-off-by: Christophe Bedard <bedard.christophe@gmail.com>
This commit is contained in:
Christophe Bedard 2020-05-06 10:14:32 -04:00
parent 0692e32b22
commit 233d63077e

View file

@ -289,12 +289,14 @@ class Processor():
def __init__( def __init__(
self, self,
*handlers: EventHandler, *handlers: EventHandler,
quiet: bool = False,
**kwargs, **kwargs,
) -> None: ) -> None:
""" """
Create a Processor. Create a Processor.
:param handlers: the `EventHandler`s to use for processing :param handlers: the `EventHandler`s to use for processing
:param quiet: whether to not print any output, like progress information
:param kwargs: the parameters to pass on to new handlers :param kwargs: the parameters to pass on to new handlers
""" """
self._initial_handlers = list(handlers) self._initial_handlers = list(handlers)
@ -303,9 +305,10 @@ class Processor():
self._expanded_handlers = self._expand_dependencies(*handlers, **kwargs) self._expanded_handlers = self._expand_dependencies(*handlers, **kwargs)
self._handler_multimap = self._get_handler_maps(self._expanded_handlers) self._handler_multimap = self._get_handler_maps(self._expanded_handlers)
self._register_with_handlers(self._expanded_handlers) self._register_with_handlers(self._expanded_handlers)
self._quiet = quiet
self._progress_display = ProcessingProgressDisplay( self._progress_display = ProcessingProgressDisplay(
[type(handler).__name__ for handler in self._expanded_handlers], [type(handler).__name__ for handler in self._expanded_handlers],
) ) if not self._quiet else None
self._processing_done = False self._processing_done = False
@staticmethod @staticmethod
@ -401,12 +404,17 @@ class Processor():
self._check_required_events(events) self._check_required_events(events)
if not self._processing_done: if not self._processing_done:
# Split into two versions so that performance is optimal
if self._progress_display is None:
for event in events:
self._process_event(event)
else:
self._progress_display.set_work_total(len(events)) self._progress_display.set_work_total(len(events))
for event in events: for event in events:
self._process_event(event) self._process_event(event)
self._progress_display.did_work() self._progress_display.did_work()
self._processing_done = True
self._progress_display.done(erase=erase_progress) self._progress_display.done(erase=erase_progress)
self._processing_done = True
def _process_event(self, event: DictEvent) -> None: def _process_event(self, event: DictEvent) -> None:
"""Process a single event.""" """Process a single event."""