From 30a9628ddaea74a45fa81191312c660300e0d949 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jannes=20H=C3=B6ke?= Date: Wed, 9 Aug 2017 23:07:19 +0200 Subject: [PATCH 1/2] catch exceptions in error handlerfor errors that happen during polling --- telegram/ext/dispatcher.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/telegram/ext/dispatcher.py b/telegram/ext/dispatcher.py index bd523fbe5a4..6453a6d48d0 100644 --- a/telegram/ext/dispatcher.py +++ b/telegram/ext/dispatcher.py @@ -264,8 +264,12 @@ def process_update(self, update): # An error happened while polling if isinstance(update, TelegramError): - self.dispatch_error(None, update) + try: + self.dispatch_error(None, update) + except Exception: + self.logger.exception('An uncaught error was raised while handling the error') return + for group in self.groups: try: for handler in (x for x in self.handlers[group] if x.check_update(update)): From 5239f527a161faf35933240410fb447330964b95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jannes=20H=C3=B6ke?= Date: Sat, 26 Aug 2017 23:20:12 +0200 Subject: [PATCH 2/2] add tests for error handlers that raise exceptions --- tests/test_dispatcher.py | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/tests/test_dispatcher.py b/tests/test_dispatcher.py index 8ddf6077213..55ef5de801f 100644 --- a/tests/test_dispatcher.py +++ b/tests/test_dispatcher.py @@ -47,6 +47,9 @@ def reset(self): def error_handler(self, bot, update, error): self.received = error.message + def error_handler_raise_error(self, bot, update, error): + raise Exception('Failing bigly') + def callback_increase_count(self, bot, update): self.count += 1 @@ -78,6 +81,30 @@ def test_error_handler(self, dp): sleep(.1) assert self.received is None + def test_error_handler_that_raises_errors(self, dp): + """ + Make sure that errors raised in error handlers don't break the main loop of the dispatcher + """ + handler_raise_error = MessageHandler(Filters.all, self.callback_raise_error) + handler_increase_count = MessageHandler(Filters.all, self.callback_increase_count) + error = TelegramError('Unauthorized.') + + dp.add_error_handler(self.error_handler_raise_error) + + # From errors caused by handlers + dp.add_handler(handler_raise_error) + dp.update_queue.put(self.message_update) + sleep(.1) + + # From errors in the update_queue + dp.remove_handler(handler_raise_error) + dp.add_handler(handler_increase_count) + dp.update_queue.put(error) + dp.update_queue.put(self.message_update) + sleep(.1) + + assert self.count == 1 + def test_run_async_multiple(self, bot, dp, dp2): def get_dispatcher_name(q): q.put(current_thread().name) pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy