From c1041655f6539f066cc9f92e41b91356bc8e2795 Mon Sep 17 00:00:00 2001 From: Bibo-Joshi <22366557+Bibo-Joshi@users.noreply.github.com> Date: Wed, 18 May 2022 07:48:20 +0200 Subject: [PATCH] Adjust Equality Comparisons to Fit Bot API 6.0 (#3033) --- telegram/_inline/inlinekeyboardbutton.py | 9 +++++++-- telegram/_keyboardbutton.py | 9 +++++++-- telegram/_webhookinfo.py | 8 +++++++- tests/test_inlinekeyboardbutton.py | 6 +++++- tests/test_keyboardbutton.py | 6 +++++- tests/test_webhookinfo.py | 14 ++++++++++++-- 6 files changed, 43 insertions(+), 9 deletions(-) diff --git a/telegram/_inline/inlinekeyboardbutton.py b/telegram/_inline/inlinekeyboardbutton.py index 47b623db7..79cdfbf5b 100644 --- a/telegram/_inline/inlinekeyboardbutton.py +++ b/telegram/_inline/inlinekeyboardbutton.py @@ -35,8 +35,8 @@ class InlineKeyboardButton(TelegramObject): Objects of this class are comparable in terms of equality. Two objects of this class are considered equal, if their :attr:`text`, :attr:`url`, :attr:`login_url`, :attr:`callback_data`, - :attr:`switch_inline_query`, :attr:`switch_inline_query_current_chat`, :attr:`callback_game` - and :attr:`pay` are equal. + :attr:`switch_inline_query`, :attr:`switch_inline_query_current_chat`, :attr:`callback_game`, + :attr:`web_app` and :attr:`pay` are equal. Note: * You must use exactly one of the optional fields. Mind that :attr:`callback_game` is not @@ -62,6 +62,10 @@ class InlineKeyboardButton(TelegramObject): * After Bot API 6.1, only ``HTTPS`` links will be allowed in :paramref:`login_url`. + .. versionchanged:: 20.0 + :attr:`web_app` is considered as well when comparing objects of this type in terms of + equality. + Args: text (:obj:`str`): Label text on the button. url (:obj:`str`, optional): HTTP or tg:// url to be opened when the button is pressed. @@ -185,6 +189,7 @@ class InlineKeyboardButton(TelegramObject): self.url, self.login_url, self.callback_data, + self.web_app, self.switch_inline_query, self.switch_inline_query_current_chat, self.callback_game, diff --git a/telegram/_keyboardbutton.py b/telegram/_keyboardbutton.py index 30bfb8e65..862addbb7 100644 --- a/telegram/_keyboardbutton.py +++ b/telegram/_keyboardbutton.py @@ -35,8 +35,8 @@ class KeyboardButton(TelegramObject): used instead of this object to specify text of the button. Objects of this class are comparable in terms of equality. Two objects of this class are - considered equal, if their :attr:`text`, :attr:`request_contact`, :attr:`request_location` and - :attr:`request_poll` are equal. + considered equal, if their :attr:`text`, :attr:`request_contact`, :attr:`request_location`, + :attr:`request_poll` and :attr:`web_app` are equal. Note: * Optional fields are mutually exclusive. @@ -47,6 +47,10 @@ class KeyboardButton(TelegramObject): * :attr:`web_app` option will only work in Telegram versions released after 16 April, 2022. Older clients will display unsupported message. + .. versionchanged:: 20.0 + :attr:`web_app` is considered as well when comparing objects of this type in terms of + equality. + Args: text (:obj:`str`): Text of the button. If none of the optional fields are used, it will be sent to the bot as a message when the button is pressed. @@ -99,6 +103,7 @@ class KeyboardButton(TelegramObject): self.request_contact, self.request_location, self.request_poll, + self.web_app, ) @classmethod diff --git a/telegram/_webhookinfo.py b/telegram/_webhookinfo.py index 2bf12dfd5..adc4d6b45 100644 --- a/telegram/_webhookinfo.py +++ b/telegram/_webhookinfo.py @@ -36,7 +36,12 @@ class WebhookInfo(TelegramObject): Objects of this class are comparable in terms of equality. Two objects of this class are considered equal, if their :attr:`url`, :attr:`has_custom_certificate`, :attr:`pending_update_count`, :attr:`ip_address`, :attr:`last_error_date`, - :attr:`last_error_message`, :attr:`max_connections` and :attr:`allowed_updates` are equal. + :attr:`last_error_message`, :attr:`max_connections`, :attr:`allowed_updates` and + :attr:`last_synchronization_error_date` are equal. + + .. versionchanged:: 20.0 + :attr:`last_synchronization_error_date` is considered as well when comparing objects of + this type in terms of equality. Args: url (:obj:`str`): Webhook URL, may be empty if webhook is not set up. @@ -121,6 +126,7 @@ class WebhookInfo(TelegramObject): self.last_error_message, self.max_connections, self.allowed_updates, + self.last_synchronization_error_date, ) @classmethod diff --git a/tests/test_inlinekeyboardbutton.py b/tests/test_inlinekeyboardbutton.py index 65be00e1f..2cf7542ff 100644 --- a/tests/test_inlinekeyboardbutton.py +++ b/tests/test_inlinekeyboardbutton.py @@ -130,7 +130,8 @@ class TestInlineKeyboardButton: c = InlineKeyboardButton("texts", callback_data="data") d = InlineKeyboardButton("text", callback_data="info") e = InlineKeyboardButton("text", url="http://google.com") - f = LoginUrl("http://google.com") + f = InlineKeyboardButton("text", web_app=WebAppInfo(url="https://ptb.org")) + g = LoginUrl("http://google.com") assert a == b assert hash(a) == hash(b) @@ -147,6 +148,9 @@ class TestInlineKeyboardButton: assert a != f assert hash(a) != hash(f) + assert a != g + assert hash(a) != hash(g) + @pytest.mark.parametrize("callback_data", ["foo", 1, ("da", "ta"), object()]) def test_update_callback_data(self, callback_data): button = InlineKeyboardButton(text="test", callback_data="data") diff --git a/tests/test_keyboardbutton.py b/tests/test_keyboardbutton.py index 0f1b6bf0e..950dc30ab 100644 --- a/tests/test_keyboardbutton.py +++ b/tests/test_keyboardbutton.py @@ -85,7 +85,8 @@ class TestKeyboardButton: a = KeyboardButton("test", request_contact=True) b = KeyboardButton("test", request_contact=True) c = KeyboardButton("Test", request_location=True) - d = InlineKeyboardButton("test", callback_data="test") + d = KeyboardButton("Test", web_app=WebAppInfo(url="https://ptb.org")) + e = InlineKeyboardButton("test", callback_data="test") assert a == b assert hash(a) == hash(b) @@ -95,3 +96,6 @@ class TestKeyboardButton: assert a != d assert hash(a) != hash(d) + + assert a != e + assert hash(a) != hash(e) diff --git a/tests/test_webhookinfo.py b/tests/test_webhookinfo.py index 4c6ed9073..063e0ab80 100644 --- a/tests/test_webhookinfo.py +++ b/tests/test_webhookinfo.py @@ -105,7 +105,6 @@ class TestWebhookInfo: pending_update_count=self.pending_update_count, last_error_date=self.last_error_date, max_connections=self.max_connections, - last_synchronization_error_date=self.last_synchronization_error_date, ) b = WebhookInfo( url=self.url, @@ -121,7 +120,15 @@ class TestWebhookInfo: last_error_date=0, max_connections=1, ) - d = LoginUrl("text.com") + d = WebhookInfo( + url="http://github.com", + has_custom_certificate=True, + pending_update_count=78, + last_error_date=0, + max_connections=1, + last_synchronization_error_date=123, + ) + e = LoginUrl("text.com") assert a == b assert hash(a) == hash(b) @@ -132,3 +139,6 @@ class TestWebhookInfo: assert a != d assert hash(a) != hash(d) + + assert a != e + assert hash(a) != hash(e)