def _event_handler(self, evt_cls): handler_name = name_handler_method(evt_cls) try: return getattr(self, handler_name) except AttributeError: self._logger.critical("Missing handler", handler=handler_name, cls=evt_cls.__name__) # Raise the exception as it is a developer error raise
def _dispatch_evt_to_handler(self, evt): handler_name = name_handler_method(evt.__class__) try: getattr(self, handler_name)(evt) return except DomainError as e: self._abort_operation( evt.id, str(e), e.details, evt=evt, traceback=traceback.format_exc() ) except Exception as e: self._abort_operation( evt.id, str(e), {}, evt=evt, traceback=traceback.format_exc() )
def _dispatch_cmd_to_handler(self, cmd): handler_name = name_handler_method(cmd.__class__) try_count = 1 while try_count > 0: try: getattr(self, handler_name)(cmd) return except RepoError as e: # TODO: Reaching outside of the loop should trigger an error self._logger.error("Repo error", cmd=cmd, error=e) try_count -= 1 except DomainError as e: self._abort_operation( cmd.id, str(e), e.details, cmd=cmd, traceback=traceback.format_exc() ) return except Exception as e: self._abort_operation( cmd.id, str(e), {}, cmd=cmd, traceback=traceback.format_exc() ) return
def raise_event(self, controller, evt_cls, *args, **kwargs): event = evt_cls(*args, **kwargs) getattr(controller, name_handler_method(evt_cls))(event)
def _default_handler_factory(self, evt_cls): handler_name = name_handler_method(evt_cls) return getattr(self, handler_name)