mirror of
https://github.com/python-telegram-bot/python-telegram-bot.git
synced 2025-01-08 19:34:12 +01:00
Add Two UserWarnings (#2464)
* Warn if number of workers < one Signed-off-by: starry69 <starry369126@outlook.com> * improve warning message Signed-off-by: starry69 <starry369126@outlook.com> * warn if converstation handler return unknown state Signed-off-by: starry69 <starry369126@outlook.com> * Show handler name and state aswell, in warning Signed-off-by: starry69 <starry369126@outlook.com> * minor nitpick Signed-off-by: starry69 <starry369126@outlook.com>
This commit is contained in:
parent
9d93417d9a
commit
b63877b1f2
4 changed files with 49 additions and 0 deletions
|
@ -592,6 +592,11 @@ class ConversationHandler(Handler[Update]):
|
||||||
)
|
)
|
||||||
|
|
||||||
elif new_state is not None:
|
elif new_state is not None:
|
||||||
|
if new_state not in self.states:
|
||||||
|
warnings.warn(
|
||||||
|
f"Handler returned state {new_state} which is unknown to the "
|
||||||
|
f"ConversationHandler{' ' + self.name if self.name is not None else ''}."
|
||||||
|
)
|
||||||
with self._conversations_lock:
|
with self._conversations_lock:
|
||||||
self.conversations[key] = new_state
|
self.conversations[key] = new_state
|
||||||
if self.persistent and self.persistence and self.name:
|
if self.persistent and self.persistence and self.name:
|
||||||
|
|
|
@ -162,6 +162,11 @@ class Dispatcher:
|
||||||
stacklevel=3,
|
stacklevel=3,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if self.workers < 1:
|
||||||
|
warnings.warn(
|
||||||
|
'Asynchronous callbacks can not be processed without at least one worker thread.'
|
||||||
|
)
|
||||||
|
|
||||||
self.user_data: DefaultDict[int, Dict[object, object]] = defaultdict(dict)
|
self.user_data: DefaultDict[int, Dict[object, object]] = defaultdict(dict)
|
||||||
self.chat_data: DefaultDict[int, Dict[object, object]] = defaultdict(dict)
|
self.chat_data: DefaultDict[int, Dict[object, object]] = defaultdict(dict)
|
||||||
self.bot_data = {}
|
self.bot_data = {}
|
||||||
|
|
|
@ -433,6 +433,37 @@ class TestConversationHandler:
|
||||||
dp.process_update(Update(update_id=0, message=message))
|
dp.process_update(Update(update_id=0, message=message))
|
||||||
assert self.current_state[user1.id] == self.THIRSTY
|
assert self.current_state[user1.id] == self.THIRSTY
|
||||||
|
|
||||||
|
def test_unknown_state_warning(self, dp, bot, user1, recwarn):
|
||||||
|
handler = ConversationHandler(
|
||||||
|
entry_points=[CommandHandler("start", lambda u, c: 1)],
|
||||||
|
states={
|
||||||
|
1: [TypeHandler(Update, lambda u, c: 69)],
|
||||||
|
2: [TypeHandler(Update, lambda u, c: -1)],
|
||||||
|
},
|
||||||
|
fallbacks=self.fallbacks,
|
||||||
|
name="xyz",
|
||||||
|
)
|
||||||
|
dp.add_handler(handler)
|
||||||
|
message = Message(
|
||||||
|
0,
|
||||||
|
None,
|
||||||
|
self.group,
|
||||||
|
from_user=user1,
|
||||||
|
text='/start',
|
||||||
|
entities=[
|
||||||
|
MessageEntity(type=MessageEntity.BOT_COMMAND, offset=0, length=len('/start'))
|
||||||
|
],
|
||||||
|
bot=bot,
|
||||||
|
)
|
||||||
|
dp.process_update(Update(update_id=0, message=message))
|
||||||
|
sleep(0.5)
|
||||||
|
dp.process_update(Update(update_id=1, message=message))
|
||||||
|
sleep(0.5)
|
||||||
|
assert len(recwarn) == 1
|
||||||
|
assert str(recwarn[0].message) == (
|
||||||
|
"Handler returned state 69 which is unknown to the ConversationHandler xyz."
|
||||||
|
)
|
||||||
|
|
||||||
def test_conversation_handler_per_chat(self, dp, bot, user1, user2):
|
def test_conversation_handler_per_chat(self, dp, bot, user1, user2):
|
||||||
handler = ConversationHandler(
|
handler = ConversationHandler(
|
||||||
entry_points=self.entry_points,
|
entry_points=self.entry_points,
|
||||||
|
|
|
@ -97,6 +97,14 @@ class TestDispatcher:
|
||||||
):
|
):
|
||||||
self.received = context.error.message
|
self.received = context.error.message
|
||||||
|
|
||||||
|
def test_less_than_one_worker_warning(self, dp, recwarn):
|
||||||
|
Dispatcher(dp.bot, dp.update_queue, job_queue=dp.job_queue, workers=0, use_context=True)
|
||||||
|
assert len(recwarn) == 1
|
||||||
|
assert (
|
||||||
|
str(recwarn[0].message)
|
||||||
|
== 'Asynchronous callbacks can not be processed without at least one worker thread.'
|
||||||
|
)
|
||||||
|
|
||||||
def test_one_context_per_update(self, cdp):
|
def test_one_context_per_update(self, cdp):
|
||||||
def one(update, context):
|
def one(update, context):
|
||||||
if update.message.text == 'test':
|
if update.message.text == 'test':
|
||||||
|
|
Loading…
Reference in a new issue