From a39fb1472685285af6389df9a41b44a3ef137be9 Mon Sep 17 00:00:00 2001 From: FosterToster Date: Sun, 18 Apr 2021 19:56:52 +0700 Subject: [PATCH 1/4] middleware handlers exception handling --- telebot/__init__.py | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/telebot/__init__.py b/telebot/__init__.py index 7fcffc9..597d486 100644 --- a/telebot/__init__.py +++ b/telebot/__init__.py @@ -339,13 +339,19 @@ class TeleBot: new_pre_checkout_queries = None new_polls = None new_poll_answers = None - + for update in updates: if apihelper.ENABLE_MIDDLEWARE: - self.process_middlewares(update) - + try: + self.process_middlewares(update) + except Exception as e: + logger.error(str(e)) + update.middleware_error = e # for future handling if it needed + if update.update_id > self.last_update_id: self.last_update_id = update.update_id + if hasattr(update, 'middleware_error'): + continue if update.message: if new_messages is None: new_messages = [] new_messages.append(update.message) @@ -443,11 +449,19 @@ class TeleBot: for update_type, middlewares in self.typed_middleware_handlers.items(): if getattr(update, update_type) is not None: for typed_middleware_handler in middlewares: - typed_middleware_handler(self, getattr(update, update_type)) + try: + typed_middleware_handler(self, getattr(update, update_type)) + except Exception as e: + e.args = (f'Typed middleware handler "{typed_middleware_handler.__qualname__}" raised exception: {str(e)}',) + raise if len(self.default_middleware_handlers) > 0: for default_middleware_handler in self.default_middleware_handlers: - default_middleware_handler(self, update) + try: + default_middleware_handler(self, update) + except Exception as e: + e.args = (f'Default middleware handler "{typed_middleware_handler.__qualname__}" raised exception: {str(e)}',) + raise def __notify_update(self, new_messages): if len(self.update_listener) == 0: From 042d8c17da814b2a5706f6f1d55474a1c8668178 Mon Sep 17 00:00:00 2001 From: FosterToster Date: Sun, 18 Apr 2021 22:31:24 +0700 Subject: [PATCH 2/4] suppress_middleware_excepions configuration. False by default. --- telebot/__init__.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/telebot/__init__.py b/telebot/__init__.py index 597d486..46c201a 100644 --- a/telebot/__init__.py +++ b/telebot/__init__.py @@ -95,7 +95,8 @@ class TeleBot: def __init__( self, token, parse_mode=None, threaded=True, skip_pending=False, num_threads=2, - next_step_backend=None, reply_backend=None, exception_handler=None, last_update_id=0 + next_step_backend=None, reply_backend=None, exception_handler=None, last_update_id=0, + suppress_middleware_excepions=False ): """ :param token: bot API token @@ -107,6 +108,7 @@ class TeleBot: self.parse_mode = parse_mode self.update_listener = [] self.skip_pending = skip_pending + self.suppress_middleware_excepions = suppress_middleware_excepions self.__stop_polling = threading.Event() self.last_update_id = last_update_id @@ -346,6 +348,8 @@ class TeleBot: self.process_middlewares(update) except Exception as e: logger.error(str(e)) + if not self.suppress_middleware_excepions: + raise update.middleware_error = e # for future handling if it needed if update.update_id > self.last_update_id: From 855b838e912e87279b8fe845e70648f800dc6e81 Mon Sep 17 00:00:00 2001 From: FosterToster Date: Sun, 18 Apr 2021 22:41:28 +0700 Subject: [PATCH 3/4] more explict process_middleware exceptions suppressing --- telebot/__init__.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/telebot/__init__.py b/telebot/__init__.py index 46c201a..8638d94 100644 --- a/telebot/__init__.py +++ b/telebot/__init__.py @@ -350,12 +350,12 @@ class TeleBot: logger.error(str(e)) if not self.suppress_middleware_excepions: raise - update.middleware_error = e # for future handling if it needed + else: + if update.update_id > self.last_update_id: self.last_update_id = update.update_id + continue if update.update_id > self.last_update_id: self.last_update_id = update.update_id - if hasattr(update, 'middleware_error'): - continue if update.message: if new_messages is None: new_messages = [] new_messages.append(update.message) From 2565094897bada8bd2ae2f43cc322a0b8e37a250 Mon Sep 17 00:00:00 2001 From: FosterToster Date: Mon, 19 Apr 2021 22:20:42 +0700 Subject: [PATCH 4/4] fixed overwriting exception args --- telebot/__init__.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/telebot/__init__.py b/telebot/__init__.py index 8638d94..64d283e 100644 --- a/telebot/__init__.py +++ b/telebot/__init__.py @@ -456,7 +456,7 @@ class TeleBot: try: typed_middleware_handler(self, getattr(update, update_type)) except Exception as e: - e.args = (f'Typed middleware handler "{typed_middleware_handler.__qualname__}" raised exception: {str(e)}',) + e.args = e.args + (f'Typed middleware handler "{typed_middleware_handler.__qualname__}"',) raise if len(self.default_middleware_handlers) > 0: @@ -464,7 +464,7 @@ class TeleBot: try: default_middleware_handler(self, update) except Exception as e: - e.args = (f'Default middleware handler "{typed_middleware_handler.__qualname__}" raised exception: {str(e)}',) + e.args = e.args + (f'Default middleware handler "{default_middleware_handler.__qualname__}"',) raise def __notify_update(self, new_messages):