From 6482ef0c948ccb0371908676aa11c93036d0a868 Mon Sep 17 00:00:00 2001 From: Hinrich Mahler <22366557+Bibo-Joshi@users.noreply.github.com> Date: Mon, 14 Nov 2022 20:31:39 +0100 Subject: [PATCH 1/3] Make answer_web_app_query insert/replace default values --- telegram/bot.py | 65 ++++++++++++++++--------------- tests/test_bot.py | 99 ++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 131 insertions(+), 33 deletions(-) diff --git a/telegram/bot.py b/telegram/bot.py index 39976c4432c..af703f81659 100644 --- a/telegram/bot.py +++ b/telegram/bot.py @@ -2200,6 +2200,36 @@ def _effective_inline_results( # pylint: disable=R0201 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 @@ def answer_inline_query( """ - @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 @@ def answer_web_app_query( 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', diff --git a/tests/test_bot.py b/tests/test_bot.py index eeef8a3e82d..3706983456f 100644 --- a/tests/test_bot.py +++ b/tests/test_bot.py @@ -769,7 +769,14 @@ def make_assertion(url, data, *args, **kwargs): 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 @@ def test(url, data, *args, **kwargs): ) 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 == { From 0984295afca95c3b20a6f8bb8d6b78e8ae9704d9 Mon Sep 17 00:00:00 2001 From: Hinrich Mahler <22366557+Bibo-Joshi@users.noreply.github.com> Date: Mon, 14 Nov 2022 21:21:25 +0100 Subject: [PATCH 2/3] fix some tests --- tests/conftest.py | 8 ++++++++ tests/test_constants.py | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/tests/conftest.py b/tests/conftest.py index 641430b5606..aa9be029f98 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -44,6 +44,8 @@ ChosenInlineResult, File, ChatPermissions, + InlineQueryResultArticle, + InputTextMessageContent, ) from telegram.ext import ( Dispatcher, @@ -547,6 +549,12 @@ def build_kwargs(signature: inspect.Signature, default_kwargs, dfv: Any = DEFAUL # 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': diff --git a/tests/test_constants.py b/tests/test_constants.py index 96884249fd3..f72e2125f56 100644 --- a/tests/test_constants.py +++ b/tests/test_constants.py @@ -44,6 +44,6 @@ def test_max_caption_length(self, bot, chat_id): 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) From c6ed3251196e1b3cbbc488b771aadcfa3a0d36f5 Mon Sep 17 00:00:00 2001 From: Hinrich Mahler <22366557+Bibo-Joshi@users.noreply.github.com> Date: Tue, 15 Nov 2022 09:00:55 +0100 Subject: [PATCH 3/3] bump pyupgrade to make pre-commit work --- .pre-commit-config.yaml | 2 +- requirements-dev.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index fe9420fae19..9e03f85dd9f 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -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$ diff --git a/requirements-dev.txt b/requirements-dev.txt index d6089671901..092a5b57a1b 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -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