mirror of
https://github.com/python-telegram-bot/python-telegram-bot.git
synced 2025-03-24 07:49:40 +01:00
Changed promises to handle exceptions
This commit is contained in:
parent
264b9bd08c
commit
fb378775a4
3 changed files with 18 additions and 10 deletions
|
@ -128,10 +128,16 @@ class ConversationHandler(Handler):
|
||||||
self.logger.debug('waiting for promise...')
|
self.logger.debug('waiting for promise...')
|
||||||
|
|
||||||
old_state, new_state = state
|
old_state, new_state = state
|
||||||
new_state.result(timeout=self.run_async_timeout)
|
error = False
|
||||||
|
try:
|
||||||
|
res = new_state.result(timeout=self.run_async_timeout)
|
||||||
|
except Exception as exc:
|
||||||
|
self.logger.exception("promise function raised exception: %s" %
|
||||||
|
exc)
|
||||||
|
error = True
|
||||||
|
|
||||||
if new_state.done.is_set():
|
if not error and new_state.done.is_set():
|
||||||
self.update_state(new_state.result(), key)
|
self.update_state(res, key)
|
||||||
state = self.conversations.get(key)
|
state = self.conversations.get(key)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -159,11 +159,7 @@ class Dispatcher(object):
|
||||||
len(self.__async_threads))
|
len(self.__async_threads))
|
||||||
break
|
break
|
||||||
|
|
||||||
try:
|
promise.run()
|
||||||
promise.run()
|
|
||||||
|
|
||||||
except:
|
|
||||||
self.logger.exception("run_async function raised exception")
|
|
||||||
|
|
||||||
def run_async(self, func, *args, **kwargs):
|
def run_async(self, func, *args, **kwargs):
|
||||||
"""Queue a function (with given args/kwargs) to be run asynchronously.
|
"""Queue a function (with given args/kwargs) to be run asynchronously.
|
||||||
|
|
|
@ -30,17 +30,23 @@ class Promise(object):
|
||||||
self.kwargs = kwargs
|
self.kwargs = kwargs
|
||||||
self.done = Event()
|
self.done = Event()
|
||||||
self._result = None
|
self._result = None
|
||||||
|
self._exception = None
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
try:
|
try:
|
||||||
self._result = self.pooled_function(*self.args, **self.kwargs)
|
self._result = self.pooled_function(*self.args, **self.kwargs)
|
||||||
|
|
||||||
except:
|
except Exception as exc:
|
||||||
raise
|
self._exception = exc
|
||||||
|
|
||||||
finally:
|
finally:
|
||||||
self.done.set()
|
self.done.set()
|
||||||
|
|
||||||
|
def __call__(self):
|
||||||
|
self.run()
|
||||||
|
|
||||||
def result(self, timeout=None):
|
def result(self, timeout=None):
|
||||||
self.done.wait(timeout=timeout)
|
self.done.wait(timeout=timeout)
|
||||||
|
if self._exception is not None:
|
||||||
|
raise self._exception
|
||||||
return self._result
|
return self._result
|
||||||
|
|
Loading…
Add table
Reference in a new issue