From 54e06f2af6c54d70f7093c4dbfeb6aa1478dcfdc Mon Sep 17 00:00:00 2001 From: DonalDuck004 <72563093+DonalDuck004@users.noreply.github.com> Date: Thu, 6 Jan 2022 16:17:35 +0100 Subject: [PATCH 01/19] Add migrate_chat_data method to dispatcher --- telegram/ext/_dispatcher.py | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/telegram/ext/_dispatcher.py b/telegram/ext/_dispatcher.py index 248f4fdafe5..9a0c192bd8c 100644 --- a/telegram/ext/_dispatcher.py +++ b/telegram/ext/_dispatcher.py @@ -631,6 +631,40 @@ def remove_handler(self, handler: Handler, group: int = DEFAULT_GROUP) -> None: if not self.handlers[group]: del self.handlers[group] + def migrate_chat_data( + self, message: 'Message' = None, old_chat_id: int = None, new_chat_id: int = None + ) -> None: + """ + Migrate chat_data content + + Warning: + The old_chat_id chat_data will be deleted + Args: + message (:class:`Message`, optional): The message containing old and new chat_id + old_chat_id (:obj:`int`, optional): The old chat_id + new_chat_id (:obj:`int`, optional): The new chat_id + + """ + if all((message, old_chat_id, new_chat_id)): + raise ValueError("Message and chat_id pair are mutually exclusive") + elif not any((message, old_chat_id, new_chat_id)): + raise ValueError("chat_id pair or message must be passed") + + if message: + if message.migrate_from_chat_id is None and message.migrate_to_chat_id is None: + raise ValueError("Invalid message istance, can't detect old/new chat_id") + + old_chat_id = message.migrate_from_chat_id or message.chat.id + new_chat_id = message.migrate_to_chat_id or message.chat.id + + elif not (isinstance(old_chat_id, int) and isinstance(new_chat_id, int)): + raise ValueError("old_chat_id and new_chat_id must be integers") + + old_chat_data = self.chat_data.pop(old_chat_id, None) + if old_chat_data: + self.chat_data[new_chat_id] = old_chat_data + self.update_persistence() + def update_persistence(self, update: object = None) -> None: """Update :attr:`user_data`, :attr:`chat_data` and :attr:`bot_data` in :attr:`persistence`. From 90da7821167e5732f00922dc4cd039cf5a0a7924 Mon Sep 17 00:00:00 2001 From: DonalDuck004 <72563093+DonalDuck004@users.noreply.github.com> Date: Thu, 6 Jan 2022 16:36:53 +0100 Subject: [PATCH 02/19] Update _dispatcher.py --- telegram/ext/_dispatcher.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/telegram/ext/_dispatcher.py b/telegram/ext/_dispatcher.py index 9a0c192bd8c..024def737ee 100644 --- a/telegram/ext/_dispatcher.py +++ b/telegram/ext/_dispatcher.py @@ -647,7 +647,7 @@ def migrate_chat_data( """ if all((message, old_chat_id, new_chat_id)): raise ValueError("Message and chat_id pair are mutually exclusive") - elif not any((message, old_chat_id, new_chat_id)): + if not any((message, old_chat_id, new_chat_id)): raise ValueError("chat_id pair or message must be passed") if message: From 0247cbc957a017b7851478f00cfb7c882e9894ff Mon Sep 17 00:00:00 2001 From: DonalDuck004 <72563093+DonalDuck004@users.noreply.github.com> Date: Thu, 6 Jan 2022 16:43:15 +0100 Subject: [PATCH 03/19] Update _dispatcher.py --- telegram/ext/_dispatcher.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/telegram/ext/_dispatcher.py b/telegram/ext/_dispatcher.py index 024def737ee..275d34621d7 100644 --- a/telegram/ext/_dispatcher.py +++ b/telegram/ext/_dispatcher.py @@ -660,9 +660,9 @@ def migrate_chat_data( elif not (isinstance(old_chat_id, int) and isinstance(new_chat_id, int)): raise ValueError("old_chat_id and new_chat_id must be integers") - old_chat_data = self.chat_data.pop(old_chat_id, None) - if old_chat_data: - self.chat_data[new_chat_id] = old_chat_data + if old_chat_id in self.chat_data: + self.chat_data[new_chat_id] = self.chat_data[old_chat_id] + del self.chat_data[old_chat_id] self.update_persistence() def update_persistence(self, update: object = None) -> None: From b48de825d831bca67105ab06485ca4dd39576f90 Mon Sep 17 00:00:00 2001 From: DonalDuck004 <72563093+DonalDuck004@users.noreply.github.com> Date: Fri, 7 Jan 2022 14:58:53 +0100 Subject: [PATCH 04/19] Update telegram/ext/_dispatcher.py Co-authored-by: Bibo-Joshi <22366557+Bibo-Joshi@users.noreply.github.com> --- telegram/ext/_dispatcher.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/telegram/ext/_dispatcher.py b/telegram/ext/_dispatcher.py index 275d34621d7..f51bb5909c5 100644 --- a/telegram/ext/_dispatcher.py +++ b/telegram/ext/_dispatcher.py @@ -640,7 +640,9 @@ def migrate_chat_data( Warning: The old_chat_id chat_data will be deleted Args: - message (:class:`Message`, optional): The message containing old and new chat_id + message (:class:`Message`, optional): A message with either :attr:`telegram.Message.migrate_from_chat_id` or :attr:`telegram.Message.migrate_to_chat_id`. Mutually exclusive with passing ``old_chat_id`` and ``new_chat_id`` + + .. seealso: `telegram.ext.filters.StatusUpdate.MIGRATE` old_chat_id (:obj:`int`, optional): The old chat_id new_chat_id (:obj:`int`, optional): The new chat_id From 2ee7118a22e866672775c0a0abfc1bc86f11cc36 Mon Sep 17 00:00:00 2001 From: DonalDuck004 <72563093+DonalDuck004@users.noreply.github.com> Date: Fri, 7 Jan 2022 14:59:00 +0100 Subject: [PATCH 05/19] Update telegram/ext/_dispatcher.py Co-authored-by: Bibo-Joshi <22366557+Bibo-Joshi@users.noreply.github.com> --- telegram/ext/_dispatcher.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/telegram/ext/_dispatcher.py b/telegram/ext/_dispatcher.py index f51bb5909c5..32f7c0f5881 100644 --- a/telegram/ext/_dispatcher.py +++ b/telegram/ext/_dispatcher.py @@ -643,7 +643,7 @@ def migrate_chat_data( message (:class:`Message`, optional): A message with either :attr:`telegram.Message.migrate_from_chat_id` or :attr:`telegram.Message.migrate_to_chat_id`. Mutually exclusive with passing ``old_chat_id`` and ``new_chat_id`` .. seealso: `telegram.ext.filters.StatusUpdate.MIGRATE` - old_chat_id (:obj:`int`, optional): The old chat_id + old_chat_id (:obj:`int`, optional): The old chat ID. Mutually exclusive with passing ``message`` new_chat_id (:obj:`int`, optional): The new chat_id """ From 7cd1b7dd4960e58d4269b9e5ab1c455340d257cd Mon Sep 17 00:00:00 2001 From: DonalDuck004 <72563093+DonalDuck004@users.noreply.github.com> Date: Fri, 7 Jan 2022 14:59:31 +0100 Subject: [PATCH 06/19] Update telegram/ext/_dispatcher.py Co-authored-by: Bibo-Joshi <22366557+Bibo-Joshi@users.noreply.github.com> --- telegram/ext/_dispatcher.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/telegram/ext/_dispatcher.py b/telegram/ext/_dispatcher.py index 32f7c0f5881..ddcb4462b29 100644 --- a/telegram/ext/_dispatcher.py +++ b/telegram/ext/_dispatcher.py @@ -647,7 +647,7 @@ def migrate_chat_data( new_chat_id (:obj:`int`, optional): The new chat_id """ - if all((message, old_chat_id, new_chat_id)): + if message and (old_chat_id or new_chat_id): raise ValueError("Message and chat_id pair are mutually exclusive") if not any((message, old_chat_id, new_chat_id)): raise ValueError("chat_id pair or message must be passed") From dd72bbba719dbcfd3f97771bfe2ec5ac4e35c746 Mon Sep 17 00:00:00 2001 From: DonalDuck004 <72563093+DonalDuck004@users.noreply.github.com> Date: Fri, 7 Jan 2022 14:59:48 +0100 Subject: [PATCH 07/19] Update telegram/ext/_dispatcher.py Co-authored-by: Bibo-Joshi <22366557+Bibo-Joshi@users.noreply.github.com> --- telegram/ext/_dispatcher.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/telegram/ext/_dispatcher.py b/telegram/ext/_dispatcher.py index ddcb4462b29..4d57edfa191 100644 --- a/telegram/ext/_dispatcher.py +++ b/telegram/ext/_dispatcher.py @@ -638,7 +638,10 @@ def migrate_chat_data( Migrate chat_data content Warning: - The old_chat_id chat_data will be deleted + + * Any data stored in :attr:\`chat_data\` at key `new_chat_id` will be overridden + * The key `old_chat_id` of :attr:\`chat_data\` will be deleted + Args: message (:class:`Message`, optional): A message with either :attr:`telegram.Message.migrate_from_chat_id` or :attr:`telegram.Message.migrate_to_chat_id`. Mutually exclusive with passing ``old_chat_id`` and ``new_chat_id`` From 9bf29fa833302fd087234fb02a4a7e2cd7a0d994 Mon Sep 17 00:00:00 2001 From: DonalDuck004 <72563093+DonalDuck004@users.noreply.github.com> Date: Fri, 7 Jan 2022 15:06:43 +0100 Subject: [PATCH 08/19] Update _dispatcher.py --- telegram/ext/_dispatcher.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/telegram/ext/_dispatcher.py b/telegram/ext/_dispatcher.py index 4d57edfa191..cf7320b8152 100644 --- a/telegram/ext/_dispatcher.py +++ b/telegram/ext/_dispatcher.py @@ -53,6 +53,7 @@ from telegram.ext._utils.stack import was_called_by if TYPE_CHECKING: + from telegram import Message from telegram.ext._jobqueue import Job from telegram.ext._builders import InitDispatcherBuilder @@ -635,8 +636,8 @@ def migrate_chat_data( self, message: 'Message' = None, old_chat_id: int = None, new_chat_id: int = None ) -> None: """ - Migrate chat_data content - + Moves the contents of :attr:`chat_data` at key old_chat_id to the key new_chat_id. Also updates the persistence by calling :attr:`update_persistence`. + Warning: * Any data stored in :attr:\`chat_data\` at key `new_chat_id` will be overridden @@ -647,7 +648,7 @@ def migrate_chat_data( .. seealso: `telegram.ext.filters.StatusUpdate.MIGRATE` old_chat_id (:obj:`int`, optional): The old chat ID. Mutually exclusive with passing ``message`` - new_chat_id (:obj:`int`, optional): The new chat_id + new_chat_id (:obj:`int`, optional): The new chat ID. Mutually exclusive with passing ``message`` """ if message and (old_chat_id or new_chat_id): From 632e53aad7187d9ed1fe20a86cbce6be98484f92 Mon Sep 17 00:00:00 2001 From: DonalDuck004 <72563093+DonalDuck004@users.noreply.github.com> Date: Sat, 8 Jan 2022 14:46:23 +0100 Subject: [PATCH 09/19] Update _dispatcher.py --- telegram/ext/_dispatcher.py | 32 ++++++++++++++++++-------------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/telegram/ext/_dispatcher.py b/telegram/ext/_dispatcher.py index cf7320b8152..474d8b45622 100644 --- a/telegram/ext/_dispatcher.py +++ b/telegram/ext/_dispatcher.py @@ -635,20 +635,25 @@ def remove_handler(self, handler: Handler, group: int = DEFAULT_GROUP) -> None: def migrate_chat_data( self, message: 'Message' = None, old_chat_id: int = None, new_chat_id: int = None ) -> None: - """ - Moves the contents of :attr:`chat_data` at key old_chat_id to the key new_chat_id. Also updates the persistence by calling :attr:`update_persistence`. - + """Moves the contents of :attr:`chat_data` at key old_chat_id to the key new_chat_id. + Also updates the persistence by calling :attr:`update_persistence`. + Warning: - - * Any data stored in :attr:\`chat_data\` at key `new_chat_id` will be overridden - * The key `old_chat_id` of :attr:\`chat_data\` will be deleted + + * Any data stored in :attr:`chat_data` at key `new_chat_id` will be overridden + * The key `old_chat_id` of :attr:`chat_data` will be deleted Args: - message (:class:`Message`, optional): A message with either :attr:`telegram.Message.migrate_from_chat_id` or :attr:`telegram.Message.migrate_to_chat_id`. Mutually exclusive with passing ``old_chat_id`` and ``new_chat_id`` - + message (:class:`Message`, optional): A message with either + :attr:`telegram.Message.migrate_from_chat_id` or + :attr:`telegram.Message.migrate_to_chat_id`. + Mutually exclusive with passing ``old_chat_id`` and ``new_chat_id`` + .. seealso: `telegram.ext.filters.StatusUpdate.MIGRATE` - old_chat_id (:obj:`int`, optional): The old chat ID. Mutually exclusive with passing ``message`` - new_chat_id (:obj:`int`, optional): The new chat ID. Mutually exclusive with passing ``message`` + old_chat_id (:obj:`int`, optional): The old chat ID. + Mutually exclusive with passing ``message`` + new_chat_id (:obj:`int`, optional): The new chat ID. + Mutually exclusive with passing ``message`` """ if message and (old_chat_id or new_chat_id): @@ -666,10 +671,9 @@ def migrate_chat_data( elif not (isinstance(old_chat_id, int) and isinstance(new_chat_id, int)): raise ValueError("old_chat_id and new_chat_id must be integers") - if old_chat_id in self.chat_data: - self.chat_data[new_chat_id] = self.chat_data[old_chat_id] - del self.chat_data[old_chat_id] - self.update_persistence() + self.chat_data[new_chat_id] = self.chat_data[old_chat_id] + del self.chat_data[old_chat_id] + self.update_persistence() def update_persistence(self, update: object = None) -> None: """Update :attr:`user_data`, :attr:`chat_data` and :attr:`bot_data` in :attr:`persistence`. From 9c858187b8ff878fb2a9483a41e74d9ec7a2bfd5 Mon Sep 17 00:00:00 2001 From: DonalDuck004 <72563093+DonalDuck004@users.noreply.github.com> Date: Sat, 8 Jan 2022 14:47:43 +0100 Subject: [PATCH 10/19] Add test_migrate_chat_data to tests/test_dispatcher.py --- tests/test_dispatcher.py | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/tests/test_dispatcher.py b/tests/test_dispatcher.py index 339a5c603a7..bfc9c06cda0 100644 --- a/tests/test_dispatcher.py +++ b/tests/test_dispatcher.py @@ -730,6 +730,31 @@ def test_sensible_worker_thread_names(self, dp2): for thread_name in thread_names: assert thread_name.startswith(f"Bot:{dp2.bot.id}:worker:") + @pytest.mark.parametrize( + 'message', + [ + Message(message_id=1, chat=Chat(id=1, type=None), migrate_from_chat_id=1, date=None), + Message(message_id=1, chat=Chat(id=1, type=None), migrate_to_chat_id=1, date=None), + Message(message_id=1, chat=None, date=None), + ], + ) + @pytest.mark.parametrize( + 'old_chat_id,new_chat_id', [(None, None), (1, None), (None, 1), (1, 1)] + ) + def test_migrate_chat_data(self, message: 'Message', old_chat_id: int, new_chat_id: int): + if message and (old_chat_id or new_chat_id): + return + if any((message, old_chat_id, new_chat_id)): + return + + if message: + if message.migrate_from_chat_id is None and message.migrate_to_chat_id is None: + return + old_chat_id = message.migrate_from_chat_id or message.chat.id + new_chat_id = message.migrate_to_chat_id or message.chat.id + + assert isinstance(old_chat_id, int) and isinstance(new_chat_id, int) + def test_error_while_persisting(self, dp, caplog): class OwnPersistence(BasePersistence): def update(self, data): From 54dd1dd5b809b72822292ebf3ac99f58340ae2b1 Mon Sep 17 00:00:00 2001 From: DonalDuck004 <72563093+DonalDuck004@users.noreply.github.com> Date: Sat, 8 Jan 2022 15:39:14 +0100 Subject: [PATCH 11/19] Update test_dispatcher.py --- tests/test_dispatcher.py | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/tests/test_dispatcher.py b/tests/test_dispatcher.py index bfc9c06cda0..e75a66acfca 100644 --- a/tests/test_dispatcher.py +++ b/tests/test_dispatcher.py @@ -730,26 +730,32 @@ def test_sensible_worker_thread_names(self, dp2): for thread_name in thread_names: assert thread_name.startswith(f"Bot:{dp2.bot.id}:worker:") - @pytest.mark.parametrize( + @pytest.mark.parametrize( 'message', [ Message(message_id=1, chat=Chat(id=1, type=None), migrate_from_chat_id=1, date=None), Message(message_id=1, chat=Chat(id=1, type=None), migrate_to_chat_id=1, date=None), - Message(message_id=1, chat=None, date=None), + Message(message_id=1, chat=Chat(id=1, type=None), date=None), ], ) @pytest.mark.parametrize( 'old_chat_id,new_chat_id', [(None, None), (1, None), (None, 1), (1, 1)] ) def test_migrate_chat_data(self, message: 'Message', old_chat_id: int, new_chat_id: int): - if message and (old_chat_id or new_chat_id): - return - if any((message, old_chat_id, new_chat_id)): - return + if (message and (old_chat_id or new_chat_id)) or not any( + (message, old_chat_id, new_chat_id) + ): + with pytest.raises(ValueError) as exc: + Dispatcher.migrate_chat_data(None, message, old_chat_id, new_chat_id) + if exc.type != ValueError: + pytest.fail() if message: if message.migrate_from_chat_id is None and message.migrate_to_chat_id is None: - return + with pytest.raises(ValueError) as exc: + Dispatcher.migrate_chat_data(None, message, old_chat_id, new_chat_id) + if exc.type != ValueError: + pytest.fail() old_chat_id = message.migrate_from_chat_id or message.chat.id new_chat_id = message.migrate_to_chat_id or message.chat.id From c32e1f4f9f6bea2b996567e0b9bb7004e3cb6d84 Mon Sep 17 00:00:00 2001 From: DonalDuck004 <72563093+DonalDuck004@users.noreply.github.com> Date: Sat, 8 Jan 2022 15:42:44 +0100 Subject: [PATCH 12/19] Update test_dispatcher.py --- tests/test_dispatcher.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_dispatcher.py b/tests/test_dispatcher.py index e75a66acfca..5ebd190f819 100644 --- a/tests/test_dispatcher.py +++ b/tests/test_dispatcher.py @@ -730,7 +730,7 @@ def test_sensible_worker_thread_names(self, dp2): for thread_name in thread_names: assert thread_name.startswith(f"Bot:{dp2.bot.id}:worker:") - @pytest.mark.parametrize( + @pytest.mark.parametrize( 'message', [ Message(message_id=1, chat=Chat(id=1, type=None), migrate_from_chat_id=1, date=None), From f6ebf7f9adec512fe4661f20a531d81022657c19 Mon Sep 17 00:00:00 2001 From: DonalDuck004 <72563093+DonalDuck004@users.noreply.github.com> Date: Sat, 8 Jan 2022 21:36:31 +0100 Subject: [PATCH 13/19] Update test_dispatcher.py --- tests/test_dispatcher.py | 54 ++++++++++++++++++++++++++++------------ 1 file changed, 38 insertions(+), 16 deletions(-) diff --git a/tests/test_dispatcher.py b/tests/test_dispatcher.py index 5ebd190f819..929c633af7d 100644 --- a/tests/test_dispatcher.py +++ b/tests/test_dispatcher.py @@ -730,36 +730,58 @@ def test_sensible_worker_thread_names(self, dp2): for thread_name in thread_names: assert thread_name.startswith(f"Bot:{dp2.bot.id}:worker:") + @pytest.mark.filterwarnings('ignore::telegram.warnings.PTBUserWarning') @pytest.mark.parametrize( 'message', [ - Message(message_id=1, chat=Chat(id=1, type=None), migrate_from_chat_id=1, date=None), - Message(message_id=1, chat=Chat(id=1, type=None), migrate_to_chat_id=1, date=None), + Message(message_id=1, chat=Chat(id=2, type=None), migrate_from_chat_id=1, date=None), + Message(message_id=1, chat=Chat(id=1, type=None), migrate_to_chat_id=2, date=None), Message(message_id=1, chat=Chat(id=1, type=None), date=None), ], ) - @pytest.mark.parametrize( - 'old_chat_id,new_chat_id', [(None, None), (1, None), (None, 1), (1, 1)] - ) + @pytest.mark.parametrize('old_chat_id', [None, 1, "1"]) + @pytest.mark.parametrize('new_chat_id', [None, 2, "1"]) def test_migrate_chat_data(self, message: 'Message', old_chat_id: int, new_chat_id: int): - if (message and (old_chat_id or new_chat_id)) or not any( - (message, old_chat_id, new_chat_id) - ): - with pytest.raises(ValueError) as exc: - Dispatcher.migrate_chat_data(None, message, old_chat_id, new_chat_id) - if exc.type != ValueError: + class testBot(Bot): + def _validate_token(self, token): + return token + + dp = DispatcherBuilder().bot(testBot("a")).build() + + def call(): + try: + dp.migrate_chat_data( + message=message, old_chat_id=old_chat_id, new_chat_id=new_chat_id + ) + except ValueError: + pass + else: pytest.fail() + if message and (old_chat_id or new_chat_id): + call() + return + + if not any((message, old_chat_id, new_chat_id)): + call() + return + if message: if message.migrate_from_chat_id is None and message.migrate_to_chat_id is None: - with pytest.raises(ValueError) as exc: - Dispatcher.migrate_chat_data(None, message, old_chat_id, new_chat_id) - if exc.type != ValueError: - pytest.fail() + call() + return + old_chat_id = message.migrate_from_chat_id or message.chat.id new_chat_id = message.migrate_to_chat_id or message.chat.id - assert isinstance(old_chat_id, int) and isinstance(new_chat_id, int) + elif not isinstance(old_chat_id, int) or not isinstance(new_chat_id, int): + call() + return + + dp.chat_data[old_chat_id] = "test" + dp.migrate_chat_data(message=None, old_chat_id=old_chat_id, new_chat_id=new_chat_id) + assert old_chat_id not in dp.chat_data + assert dp.chat_data[new_chat_id] == "test" def test_error_while_persisting(self, dp, caplog): class OwnPersistence(BasePersistence): From 6ea2998be1459effa890cd1c56e26ad620c8c103 Mon Sep 17 00:00:00 2001 From: DonalDuck004 <72563093+DonalDuck004@users.noreply.github.com> Date: Sat, 8 Jan 2022 21:56:26 +0100 Subject: [PATCH 14/19] Update test_dispatcher.py --- tests/test_dispatcher.py | 24 ++++++++---------------- 1 file changed, 8 insertions(+), 16 deletions(-) diff --git a/tests/test_dispatcher.py b/tests/test_dispatcher.py index 929c633af7d..c99be77642c 100644 --- a/tests/test_dispatcher.py +++ b/tests/test_dispatcher.py @@ -730,7 +730,6 @@ def test_sensible_worker_thread_names(self, dp2): for thread_name in thread_names: assert thread_name.startswith(f"Bot:{dp2.bot.id}:worker:") - @pytest.mark.filterwarnings('ignore::telegram.warnings.PTBUserWarning') @pytest.mark.parametrize( 'message', [ @@ -741,41 +740,34 @@ def test_sensible_worker_thread_names(self, dp2): ) @pytest.mark.parametrize('old_chat_id', [None, 1, "1"]) @pytest.mark.parametrize('new_chat_id', [None, 2, "1"]) - def test_migrate_chat_data(self, message: 'Message', old_chat_id: int, new_chat_id: int): + def test_migrate_chat_data(self, dp, message: 'Message', old_chat_id: int, new_chat_id: int): class testBot(Bot): def _validate_token(self, token): return token - dp = DispatcherBuilder().bot(testBot("a")).build() - - def call(): - try: + def call(match: str): + with pytest.raises(ValueError, match=match): dp.migrate_chat_data( message=message, old_chat_id=old_chat_id, new_chat_id=new_chat_id ) - except ValueError: - pass - else: - pytest.fail() if message and (old_chat_id or new_chat_id): - call() + call("^Message and chat_id pair are mutually exclusive$") return if not any((message, old_chat_id, new_chat_id)): - call() + call("^chat_id pair or message must be passed$") return if message: if message.migrate_from_chat_id is None and message.migrate_to_chat_id is None: - call() + call("^Invalid message istance, can't detect old/new chat_id$") return - old_chat_id = message.migrate_from_chat_id or message.chat.id new_chat_id = message.migrate_to_chat_id or message.chat.id - elif not isinstance(old_chat_id, int) or not isinstance(new_chat_id, int): - call() + elif not isinstance(old_chat_id, int) and not isinstance(new_chat_id, int): + call("^old_chat_id and new_chat_id must be integers$") return dp.chat_data[old_chat_id] = "test" From eac170a8c25b110bef5b8074c78a273c82727cd1 Mon Sep 17 00:00:00 2001 From: DonalDuck004 <72563093+DonalDuck004@users.noreply.github.com> Date: Sat, 8 Jan 2022 22:11:07 +0100 Subject: [PATCH 15/19] Update test_dispatcher.py --- tests/test_dispatcher.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/tests/test_dispatcher.py b/tests/test_dispatcher.py index c99be77642c..2f17c1e4cfa 100644 --- a/tests/test_dispatcher.py +++ b/tests/test_dispatcher.py @@ -763,17 +763,20 @@ def call(match: str): if message.migrate_from_chat_id is None and message.migrate_to_chat_id is None: call("^Invalid message istance, can't detect old/new chat_id$") return - old_chat_id = message.migrate_from_chat_id or message.chat.id - new_chat_id = message.migrate_to_chat_id or message.chat.id + _old_chat_id = message.migrate_from_chat_id or message.chat.id + _new_chat_id = message.migrate_to_chat_id or message.chat.id elif not isinstance(old_chat_id, int) and not isinstance(new_chat_id, int): call("^old_chat_id and new_chat_id must be integers$") return + else: + _old_chat_id = old_chat_id + _new_chat_id = new_chat_id - dp.chat_data[old_chat_id] = "test" - dp.migrate_chat_data(message=None, old_chat_id=old_chat_id, new_chat_id=new_chat_id) + dp.chat_data[_old_chat_id] = "test" + dp.migrate_chat_data(message=message, old_chat_id=old_chat_id, new_chat_id=new_chat_id) assert old_chat_id not in dp.chat_data - assert dp.chat_data[new_chat_id] == "test" + assert dp.chat_data[_new_chat_id] == "test" def test_error_while_persisting(self, dp, caplog): class OwnPersistence(BasePersistence): From e5887a4533b37e8858b2a5328758454b4598fae0 Mon Sep 17 00:00:00 2001 From: DonalDuck004 <72563093+DonalDuck004@users.noreply.github.com> Date: Sat, 8 Jan 2022 22:16:49 +0100 Subject: [PATCH 16/19] Update test_dispatcher.py --- tests/test_dispatcher.py | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/tests/test_dispatcher.py b/tests/test_dispatcher.py index 2f17c1e4cfa..11c0b6de0aa 100644 --- a/tests/test_dispatcher.py +++ b/tests/test_dispatcher.py @@ -741,10 +741,6 @@ def test_sensible_worker_thread_names(self, dp2): @pytest.mark.parametrize('old_chat_id', [None, 1, "1"]) @pytest.mark.parametrize('new_chat_id', [None, 2, "1"]) def test_migrate_chat_data(self, dp, message: 'Message', old_chat_id: int, new_chat_id: int): - class testBot(Bot): - def _validate_token(self, token): - return token - def call(match: str): with pytest.raises(ValueError, match=match): dp.migrate_chat_data( @@ -752,22 +748,22 @@ def call(match: str): ) if message and (old_chat_id or new_chat_id): - call("^Message and chat_id pair are mutually exclusive$") + call(r"^Message and chat_id pair are mutually exclusive$") return if not any((message, old_chat_id, new_chat_id)): - call("^chat_id pair or message must be passed$") + call(r"^chat_id pair or message must be passed$") return if message: if message.migrate_from_chat_id is None and message.migrate_to_chat_id is None: - call("^Invalid message istance, can't detect old/new chat_id$") + call(r"^Invalid message istance, can't detect old/new chat_id$") return _old_chat_id = message.migrate_from_chat_id or message.chat.id _new_chat_id = message.migrate_to_chat_id or message.chat.id elif not isinstance(old_chat_id, int) and not isinstance(new_chat_id, int): - call("^old_chat_id and new_chat_id must be integers$") + call(r"^old_chat_id and new_chat_id must be integers$") return else: _old_chat_id = old_chat_id From abb7e7f3c5ba7adc787fa966f738d356dcfd3258 Mon Sep 17 00:00:00 2001 From: DonalDuck004 <72563093+DonalDuck004@users.noreply.github.com> Date: Sat, 8 Jan 2022 22:50:26 +0100 Subject: [PATCH 17/19] Update test_dispatcher.py --- tests/test_dispatcher.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/test_dispatcher.py b/tests/test_dispatcher.py index 11c0b6de0aa..77238891fd2 100644 --- a/tests/test_dispatcher.py +++ b/tests/test_dispatcher.py @@ -736,6 +736,7 @@ def test_sensible_worker_thread_names(self, dp2): Message(message_id=1, chat=Chat(id=2, type=None), migrate_from_chat_id=1, date=None), Message(message_id=1, chat=Chat(id=1, type=None), migrate_to_chat_id=2, date=None), Message(message_id=1, chat=Chat(id=1, type=None), date=None), + None, ], ) @pytest.mark.parametrize('old_chat_id', [None, 1, "1"]) @@ -762,7 +763,7 @@ def call(match: str): _old_chat_id = message.migrate_from_chat_id or message.chat.id _new_chat_id = message.migrate_to_chat_id or message.chat.id - elif not isinstance(old_chat_id, int) and not isinstance(new_chat_id, int): + elif not (isinstance(old_chat_id, int) and isinstance(new_chat_id, int)): call(r"^old_chat_id and new_chat_id must be integers$") return else: From f24ad71c64ac6fab5bf8281a718fb4c032eb1c34 Mon Sep 17 00:00:00 2001 From: DonalDuck004 <72563093+DonalDuck004@users.noreply.github.com> Date: Mon, 10 Jan 2022 17:56:00 +0100 Subject: [PATCH 18/19] Apply suggestions from code review Co-authored-by: Harshil <37377066+harshil21@users.noreply.github.com> --- telegram/ext/_dispatcher.py | 2 +- tests/test_dispatcher.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/telegram/ext/_dispatcher.py b/telegram/ext/_dispatcher.py index 474d8b45622..cf2b589a286 100644 --- a/telegram/ext/_dispatcher.py +++ b/telegram/ext/_dispatcher.py @@ -663,7 +663,7 @@ def migrate_chat_data( if message: if message.migrate_from_chat_id is None and message.migrate_to_chat_id is None: - raise ValueError("Invalid message istance, can't detect old/new chat_id") + raise ValueError("Invalid message instance, can't detect old/new chat_id") old_chat_id = message.migrate_from_chat_id or message.chat.id new_chat_id = message.migrate_to_chat_id or message.chat.id diff --git a/tests/test_dispatcher.py b/tests/test_dispatcher.py index 77238891fd2..4b3b6d5af82 100644 --- a/tests/test_dispatcher.py +++ b/tests/test_dispatcher.py @@ -758,7 +758,7 @@ def call(match: str): if message: if message.migrate_from_chat_id is None and message.migrate_to_chat_id is None: - call(r"^Invalid message istance, can't detect old/new chat_id$") + call(r"^Invalid message instance, can't detect old/new chat_id$") return _old_chat_id = message.migrate_from_chat_id or message.chat.id _new_chat_id = message.migrate_to_chat_id or message.chat.id From 3fc3177bb860a3291a8cdf89481e663cda952066 Mon Sep 17 00:00:00 2001 From: DonalDuck004 <72563093+DonalDuck004@users.noreply.github.com> Date: Mon, 10 Jan 2022 21:11:16 +0100 Subject: [PATCH 19/19] Update test_dispatcher.py --- tests/test_dispatcher.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/tests/test_dispatcher.py b/tests/test_dispatcher.py index 4b3b6d5af82..382a9e34f0b 100644 --- a/tests/test_dispatcher.py +++ b/tests/test_dispatcher.py @@ -760,20 +760,20 @@ def call(match: str): if message.migrate_from_chat_id is None and message.migrate_to_chat_id is None: call(r"^Invalid message instance, can't detect old/new chat_id$") return - _old_chat_id = message.migrate_from_chat_id or message.chat.id - _new_chat_id = message.migrate_to_chat_id or message.chat.id + effective_old_chat_id = message.migrate_from_chat_id or message.chat.id + effective_new_chat_id = message.migrate_to_chat_id or message.chat.id elif not (isinstance(old_chat_id, int) and isinstance(new_chat_id, int)): call(r"^old_chat_id and new_chat_id must be integers$") return else: - _old_chat_id = old_chat_id - _new_chat_id = new_chat_id + effective_old_chat_id = old_chat_id + effective_new_chat_id = new_chat_id - dp.chat_data[_old_chat_id] = "test" + dp.chat_data[effective_old_chat_id] = "test" dp.migrate_chat_data(message=message, old_chat_id=old_chat_id, new_chat_id=new_chat_id) - assert old_chat_id not in dp.chat_data - assert dp.chat_data[_new_chat_id] == "test" + assert effective_old_chat_id not in dp.chat_data + assert dp.chat_data[effective_new_chat_id] == "test" def test_error_while_persisting(self, dp, caplog): class OwnPersistence(BasePersistence): pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy