mirror of
https://github.com/python-telegram-bot/python-telegram-bot.git
synced 2026-06-19 07:35:19 +00:00
Fix Bugs in Bot.answer_web_app_query (#3364)
This commit is contained in:
@@ -56,7 +56,7 @@ repos:
|
||||
- cachetools==4.2.2
|
||||
- . # this basically does `pip install -e .`
|
||||
- repo: https://github.com/asottile/pyupgrade
|
||||
rev: v2.19.1
|
||||
rev: v3.2.2
|
||||
hooks:
|
||||
- id: pyupgrade
|
||||
files: ^(telegram|examples|tests)/.*\.py$
|
||||
|
||||
@@ -7,7 +7,7 @@ black==22.3.0
|
||||
flake8==3.9.2
|
||||
pylint==2.8.3
|
||||
mypy==0.812
|
||||
pyupgrade==2.19.1
|
||||
pyupgrade==3.2.2
|
||||
|
||||
pytest==6.2.4
|
||||
|
||||
|
||||
+33
-32
@@ -2200,6 +2200,36 @@ class Bot(TelegramObject):
|
||||
|
||||
return effective_results, next_offset
|
||||
|
||||
@no_type_check
|
||||
def _set_ilq_result_defaults(self, res):
|
||||
# pylint: disable=W0212
|
||||
if hasattr(res, 'parse_mode') and res.parse_mode == DEFAULT_NONE:
|
||||
if self.defaults:
|
||||
res.parse_mode = self.defaults.parse_mode
|
||||
else:
|
||||
res.parse_mode = None
|
||||
if hasattr(res, 'input_message_content') and res.input_message_content:
|
||||
if (
|
||||
hasattr(res.input_message_content, 'parse_mode')
|
||||
and res.input_message_content.parse_mode == DEFAULT_NONE
|
||||
):
|
||||
if self.defaults:
|
||||
res.input_message_content.parse_mode = DefaultValue.get_value(
|
||||
self.defaults.parse_mode
|
||||
)
|
||||
else:
|
||||
res.input_message_content.parse_mode = None
|
||||
if (
|
||||
hasattr(res.input_message_content, 'disable_web_page_preview')
|
||||
and res.input_message_content.disable_web_page_preview == DEFAULT_NONE
|
||||
):
|
||||
if self.defaults:
|
||||
res.input_message_content.disable_web_page_preview = DefaultValue.get_value(
|
||||
self.defaults.disable_web_page_preview
|
||||
)
|
||||
else:
|
||||
res.input_message_content.disable_web_page_preview = None
|
||||
|
||||
@log
|
||||
def answer_inline_query(
|
||||
self,
|
||||
@@ -2274,43 +2304,13 @@ class Bot(TelegramObject):
|
||||
|
||||
"""
|
||||
|
||||
@no_type_check
|
||||
def _set_defaults(res):
|
||||
# pylint: disable=W0212
|
||||
if hasattr(res, 'parse_mode') and res.parse_mode == DEFAULT_NONE:
|
||||
if self.defaults:
|
||||
res.parse_mode = self.defaults.parse_mode
|
||||
else:
|
||||
res.parse_mode = None
|
||||
if hasattr(res, 'input_message_content') and res.input_message_content:
|
||||
if (
|
||||
hasattr(res.input_message_content, 'parse_mode')
|
||||
and res.input_message_content.parse_mode == DEFAULT_NONE
|
||||
):
|
||||
if self.defaults:
|
||||
res.input_message_content.parse_mode = DefaultValue.get_value(
|
||||
self.defaults.parse_mode
|
||||
)
|
||||
else:
|
||||
res.input_message_content.parse_mode = None
|
||||
if (
|
||||
hasattr(res.input_message_content, 'disable_web_page_preview')
|
||||
and res.input_message_content.disable_web_page_preview == DEFAULT_NONE
|
||||
):
|
||||
if self.defaults:
|
||||
res.input_message_content.disable_web_page_preview = (
|
||||
DefaultValue.get_value(self.defaults.disable_web_page_preview)
|
||||
)
|
||||
else:
|
||||
res.input_message_content.disable_web_page_preview = None
|
||||
|
||||
effective_results, next_offset = self._effective_inline_results(
|
||||
results=results, next_offset=next_offset, current_offset=current_offset
|
||||
)
|
||||
|
||||
# Apply defaults
|
||||
for result in effective_results:
|
||||
_set_defaults(result)
|
||||
self._set_ilq_result_defaults(result)
|
||||
|
||||
results_dicts = [res.to_dict() for res in effective_results]
|
||||
|
||||
@@ -3939,7 +3939,8 @@ class Bot(TelegramObject):
|
||||
Raises:
|
||||
:class:`telegram.error.TelegramError`
|
||||
"""
|
||||
data: JSONDict = {'web_app_query_id': web_app_query_id, 'result': result}
|
||||
self._set_ilq_result_defaults(result)
|
||||
data: JSONDict = {'web_app_query_id': web_app_query_id, 'result': result.to_dict()}
|
||||
|
||||
api_result = self._post(
|
||||
'answerWebAppQuery',
|
||||
|
||||
@@ -44,6 +44,8 @@ from telegram import (
|
||||
ChosenInlineResult,
|
||||
File,
|
||||
ChatPermissions,
|
||||
InlineQueryResultArticle,
|
||||
InputTextMessageContent,
|
||||
)
|
||||
from telegram.ext import (
|
||||
Dispatcher,
|
||||
@@ -547,6 +549,12 @@ def check_defaults_handling(
|
||||
# Some special casing
|
||||
if name == 'permissions':
|
||||
kws[name] = ChatPermissions()
|
||||
elif name == 'result':
|
||||
kws[name] = InlineQueryResultArticle(
|
||||
id='id',
|
||||
title='title',
|
||||
input_message_content=InputTextMessageContent('content'),
|
||||
)
|
||||
elif name in ['prices', 'media', 'results', 'commands', 'errors']:
|
||||
kws[name] = []
|
||||
elif name == 'ok':
|
||||
|
||||
+98
-1
@@ -769,7 +769,14 @@ class TestBot:
|
||||
nonlocal params
|
||||
params = data == {
|
||||
'web_app_query_id': '12345',
|
||||
'result': result,
|
||||
'result': {
|
||||
"title": "title",
|
||||
"input_message_content": {
|
||||
"message_text": "text",
|
||||
},
|
||||
"type": "article",
|
||||
"id": "1",
|
||||
},
|
||||
}
|
||||
web_app_msg = SentWebAppMessage('321').to_dict()
|
||||
return web_app_msg
|
||||
@@ -825,6 +832,96 @@ class TestBot:
|
||||
)
|
||||
monkeypatch.delattr(bot.request, 'post')
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"default_bot",
|
||||
[{"parse_mode": "Markdown", "disable_web_page_preview": True}],
|
||||
indirect=True,
|
||||
)
|
||||
@pytest.mark.parametrize(
|
||||
"ilq_result,expected_params",
|
||||
[
|
||||
(
|
||||
InlineQueryResultArticle("1", "title", InputTextMessageContent("text")),
|
||||
{
|
||||
"web_app_query_id": "12345",
|
||||
"result": {
|
||||
"title": "title",
|
||||
"input_message_content": {
|
||||
"message_text": "text",
|
||||
"parse_mode": "Markdown",
|
||||
"disable_web_page_preview": True,
|
||||
},
|
||||
"type": "article",
|
||||
"id": "1",
|
||||
},
|
||||
},
|
||||
),
|
||||
(
|
||||
InlineQueryResultArticle(
|
||||
"1",
|
||||
"title",
|
||||
InputTextMessageContent(
|
||||
"text", parse_mode="HTML", disable_web_page_preview=False
|
||||
),
|
||||
),
|
||||
{
|
||||
"web_app_query_id": "12345",
|
||||
"result": {
|
||||
"title": "title",
|
||||
"input_message_content": {
|
||||
"message_text": "text",
|
||||
"parse_mode": "HTML",
|
||||
"disable_web_page_preview": False,
|
||||
},
|
||||
"type": "article",
|
||||
"id": "1",
|
||||
},
|
||||
},
|
||||
),
|
||||
(
|
||||
InlineQueryResultArticle(
|
||||
"1",
|
||||
"title",
|
||||
InputTextMessageContent(
|
||||
"text", parse_mode=None, disable_web_page_preview="False"
|
||||
),
|
||||
),
|
||||
{
|
||||
"web_app_query_id": "12345",
|
||||
"result": {
|
||||
"title": "title",
|
||||
"input_message_content": {
|
||||
"message_text": "text",
|
||||
"disable_web_page_preview": "False",
|
||||
},
|
||||
"type": "article",
|
||||
"id": "1",
|
||||
},
|
||||
},
|
||||
),
|
||||
],
|
||||
)
|
||||
def test_answer_web_app_query_defaults(
|
||||
self, default_bot, ilq_result, expected_params, monkeypatch
|
||||
):
|
||||
bot = default_bot
|
||||
params = False
|
||||
|
||||
# For now just test that our internals pass the correct data
|
||||
|
||||
def make_assertion(url, data, *args, **kwargs):
|
||||
nonlocal params
|
||||
params = data == expected_params
|
||||
web_app_msg = SentWebAppMessage("321").to_dict()
|
||||
return web_app_msg
|
||||
|
||||
monkeypatch.setattr(bot.request, "post", make_assertion)
|
||||
|
||||
web_app_msg = bot.answer_web_app_query("12345", ilq_result)
|
||||
assert params, "something went wrong with passing arguments to the request"
|
||||
assert isinstance(web_app_msg, SentWebAppMessage)
|
||||
assert web_app_msg.inline_message_id == "321"
|
||||
|
||||
def test_answer_inline_query_no_default_parse_mode(self, monkeypatch, bot):
|
||||
def test(url, data, *args, **kwargs):
|
||||
return data == {
|
||||
|
||||
@@ -44,6 +44,6 @@ class TestConstants:
|
||||
bad_caption = good_caption + 'Z'
|
||||
with pytest.raises(
|
||||
BadRequest,
|
||||
match="Media_caption_too_long",
|
||||
match="Message caption is too long",
|
||||
), open('tests/data/telegram.png', 'rb') as f:
|
||||
bot.send_photo(photo=f, caption=bad_caption, chat_id=chat_id)
|
||||
|
||||
Reference in New Issue
Block a user