diff options
| author | 2018-10-01 16:04:06 +0100 | |
|---|---|---|
| committer | 2018-10-01 16:04:06 +0100 | |
| commit | 7eb31820d78d53c30f378735c63d703321f45ecc (patch) | |
| tree | 17350faa02c954208513c6c1626e8c99b5198fd5 /src | |
| parent | Implement client-side bindhost (diff) | |
| signature | ||
Add call_unsafe functions to EventManager.EventHook, to not swallow errors on
specific function calls (e.g. preprocess.command)
Diffstat (limited to 'src')
| -rw-r--r-- | src/EventManager.py | 33 | ||||
| -rw-r--r-- | src/IRCServer.py | 2 |
2 files changed, 25 insertions, 10 deletions
diff --git a/src/EventManager.py b/src/EventManager.py index 7f397b0d..32d7f292 100644 --- a/src/EventManager.py +++ b/src/EventManager.py @@ -85,6 +85,13 @@ class EventHookContext(object): def call_limited(self, maximum, **kwargs): return self._parent.call_limited(maximum, **kwargs) + def call_unsafe_for_result(self, default=None, **kwargs): + return self._parent.call_unsafe_for_result(default, **kwargs) + def call_unsafe(self, **kwargs): + return self._parent.call_unsafe(**kwargs) + def call_unsafe_limited(self, maximum, **kwargs): + return self._parent.call_unsafe_limited(maximum, **kwargs) + def get_hooks(self): return self._parent.get_hooks() def get_children(self): @@ -187,18 +194,25 @@ class EventHook(object): return child def call_for_result(self, default=None, **kwargs): - results = self.call_limited(1, **kwargs) - return default if not len(results) else results[0] + return (self.call_limited(1, **kwargs) or [default])[0] def assure_call(self, **kwargs): if not self._stored_events == None: self._stored_events.append(kwargs) else: - self._call(kwargs) + self._call(kwargs, True, None) def call(self, **kwargs): - return self._call(kwargs) + return self._call(kwargs, True, None) def call_limited(self, maximum, **kwargs): - return self._call(kwargs, maximum=maximum) - def _call(self, kwargs, maximum=None): + return self._call(kwargs, True, None) + + def call_unsafe_for_result(self, default=None, **kwargs): + return (self.call_unsafe_limited(1, **kwargs) or [default])[0] + def call_unsafe(self, **kwargs): + return self._call(kwargs, False) + def call_unsafe_limited(self, maximum, **kwargs): + return self._call(kwargs, False, maximum) + + def _call(self, kwargs, safe, maximum): event_path = self._get_path() self.log.trace("calling event: \"%s\" (params: %s)", [event_path, kwargs]) @@ -212,9 +226,10 @@ class EventHook(object): try: returns.append(hook.call(event)) except Exception as e: - traceback.print_exc() - self.log.error("failed to call event \"%s\"", [ - event_path], exc_info=True) + self.log.error("failed to call event \"%s\"", + [self._get_path()], exc_info=True) + if not safe: + raise total_milliseconds = (time.monotonic() - start) * 1000 self.log.trace("event \"%s\" called in %fms", [ diff --git a/src/IRCServer.py b/src/IRCServer.py index 5c11fa8b..886062cd 100644 --- a/src/IRCServer.py +++ b/src/IRCServer.py @@ -252,7 +252,7 @@ class Server(IRCObject.Object): return self.until_read_timeout == 0 def send(self, data): - returned = self.events.on("preprocess.send").call_for_result( + returned = self.events.on("preprocess.send").call_unsafe_for_result( server=self, line=data) line = returned or data |
