From acb85189111df2edd7f34da2e9c0156346cbef81 Mon Sep 17 00:00:00 2001 From: Lonami Exo Date: Wed, 22 Jan 2020 14:16:27 +0100 Subject: [PATCH] Fix send_message not forwarding some args to send_file --- telethon/client/messages.py | 4 +-- telethon/client/uploads.py | 13 ++++++--- tests/telethon/client/__init__.py | 0 tests/telethon/client/test_messages.py | 40 ++++++++++++++++++++++++++ 4 files changed, 51 insertions(+), 6 deletions(-) create mode 100644 tests/telethon/client/__init__.py create mode 100644 tests/telethon/client/test_messages.py diff --git a/telethon/client/messages.py b/telethon/client/messages.py index f6582845..2e15ebd6 100644 --- a/telethon/client/messages.py +++ b/telethon/client/messages.py @@ -602,7 +602,6 @@ class MessageMethods: clear_draft (`bool`, optional): Whether the existing draft should be cleared or not. - Has no effect when sending a file. buttons (`list`, `custom.Button `, :tl:`KeyboardButton`): The matrix (list of lists), row list or button to be shown @@ -691,7 +690,8 @@ class MessageMethods: return await self.send_file( entity, file, caption=message, reply_to=reply_to, parse_mode=parse_mode, force_document=force_document, - buttons=buttons + buttons=buttons, clear_draft=clear_draft, silent=silent, + schedule=schedule ) entity = await self.get_input_entity(entity) diff --git a/telethon/client/uploads.py b/telethon/client/uploads.py index a6879914..923732e1 100644 --- a/telethon/client/uploads.py +++ b/telethon/client/uploads.py @@ -93,6 +93,7 @@ class UploadMethods: *, caption: typing.Union[str, typing.Sequence[str]] = None, force_document: bool = False, + clear_draft: bool = False, progress_callback: 'hints.ProgressCallback' = None, reply_to: 'hints.MessageIDLike' = None, attributes: 'typing.Sequence[types.TypeDocumentAttribute]' = None, @@ -168,6 +169,9 @@ class UploadMethods: the extension of an image file or a video file, it will be sent as such. Otherwise always as a document. + clear_draft (`bool`, optional): + Whether the existing draft should be cleared or not. + progress_callback (`callable`, optional): A callback function accepting two parameters: ``(sent bytes, total)``. @@ -296,7 +300,7 @@ class UploadMethods: entity, media[:10], caption=media_captions[:10], progress_callback=progress_callback, reply_to=reply_to, parse_mode=parse_mode, silent=silent, schedule=schedule, - supports_streaming=supports_streaming + supports_streaming=supports_streaming, clear_draft=clear_draft ) media = media[10:] media_captions = media_captions[10:] @@ -309,6 +313,7 @@ class UploadMethods: attributes=attributes, thumb=thumb, voice_note=voice_note, video_note=video_note, buttons=buttons, silent=silent, supports_streaming=supports_streaming, schedule=schedule, + clear_draft=clear_draft, **kwargs )) @@ -341,7 +346,7 @@ class UploadMethods: request = functions.messages.SendMediaRequest( entity, media, reply_to_msg_id=reply_to, message=caption, entities=msg_entities, reply_markup=markup, silent=silent, - schedule_date=schedule + schedule_date=schedule, clear_draft=clear_draft ) msg = self._get_response_message(request, await self(request), entity) await self._cache_media(msg, file, file_handle, image=image) @@ -351,7 +356,7 @@ class UploadMethods: async def _send_album(self: 'TelegramClient', entity, files, caption='', progress_callback=None, reply_to=None, parse_mode=(), silent=None, schedule=None, - supports_streaming=None): + supports_streaming=None, clear_draft=None): """Specialized version of .send_file for albums""" # We don't care if the user wants to avoid cache, we will use it # anyway. Why? The cached version will be exactly the same thing @@ -413,7 +418,7 @@ class UploadMethods: # Now we can construct the multi-media request request = functions.messages.SendMultiMediaRequest( entity, reply_to_msg_id=reply_to, multi_media=media, - silent=silent, schedule_date=schedule + silent=silent, schedule_date=schedule, clear_draft=clear_draft ) result = await self(request) diff --git a/tests/telethon/client/__init__.py b/tests/telethon/client/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/telethon/client/test_messages.py b/tests/telethon/client/test_messages.py new file mode 100644 index 00000000..d47fcf45 --- /dev/null +++ b/tests/telethon/client/test_messages.py @@ -0,0 +1,40 @@ +import inspect + +import pytest + +from telethon import TelegramClient + + +@pytest.mark.asyncio +async def test_send_message_with_file_forwards_args(): + arguments = {} + sentinel = object() + + for value, name in enumerate(inspect.signature(TelegramClient.send_message).parameters): + if name in {'self', 'entity', 'file'}: + continue # positional + + if name in {'message'}: + continue # renamed + + if name in {'link_preview'}: + continue # make no sense in send_file + + arguments[name] = value + + class MockedClient(TelegramClient): + # noinspection PyMissingConstructor + def __init__(self): + pass + + async def send_file(self, entity, file, **kwargs): + assert entity == 'a' + assert file == 'b' + for k, v in arguments.items(): + assert k in kwargs + assert kwargs[k] == v + + return sentinel + + client = MockedClient() + assert (await client.send_message('a', file='b', **arguments)) == sentinel