Fix EditMessageMedia

This commit is contained in:
Alex Root Junior 2019-11-14 22:38:00 +02:00
parent 54a77b369e
commit a83dd3ca63
2 changed files with 19 additions and 12 deletions

View file

@ -35,11 +35,11 @@ class Response(ResponseParameters, GenericModel, Generic[T]):
class TelegramMethod(abc.ABC, BaseModel, Generic[T]): class TelegramMethod(abc.ABC, BaseModel, Generic[T]):
class Config(BaseConfig): class Config(BaseConfig):
use_enum_values = True # use_enum_values = True
extra = Extra.allow # extra = Extra.allow
allow_population_by_field_name = True allow_population_by_field_name = True
arbitrary_types_allowed = True arbitrary_types_allowed = True
# orm_mode = True orm_mode = True
@property @property
@abc.abstractmethod @abc.abstractmethod

View file

@ -1,30 +1,33 @@
import secrets
from typing import Any, Dict, Optional, Union from typing import Any, Dict, Optional, Union
from ..types import InlineKeyboardMarkup, InputFile, Message from ..types import InlineKeyboardMarkup, InputFile, InputMedia, Message
from .base import Request, TelegramMethod from .base import Request, TelegramMethod
class EditMessageMedia(TelegramMethod[Union[Message, bool]]): class EditMessageMedia(TelegramMethod[Union[Message, bool]]):
""" """
Use this method to edit animation, audio, document, photo, or video messages. If a message is a part of a message album, then it can be edited only to a photo or a video. Otherwise, message type can be changed arbitrarily. When inline message is edited, new file can't be uploaded. Use previously uploaded file via its file_id or specify a URL. On success, if the edited message was sent by the bot, the edited Message is returned, otherwise True is returned. Use this method to edit animation, audio, document, photo, or video messages. If a message is
a part of a message album, then it can be edited only to a photo or a video. Otherwise,
message type can be changed arbitrarily. When inline message is edited, new file can't be
uploaded. Use previously uploaded file via its file_id or specify a URL. On success, if the
edited message was sent by the bot, the edited Message is returned, otherwise True is
returned.
Source: https://core.telegram.org/bots/api#editmessagemedia Source: https://core.telegram.org/bots/api#editmessagemedia
""" """
__returning__ = Union[Message, bool] __returning__ = Union[Message, bool]
media: Union[str, InputFile] media: InputMedia
"""A JSON-serialized object for a new media content of the message""" """A JSON-serialized object for a new media content of the message"""
chat_id: Optional[Union[int, str]] = None chat_id: Optional[Union[int, str]] = None
"""Required if inline_message_id is not specified. Unique identifier for the target chat or username of the target channel (in the format @channelusername)""" """Required if inline_message_id is not specified. Unique identifier for the target chat or
username of the target channel (in the format @channelusername)"""
message_id: Optional[int] = None message_id: Optional[int] = None
"""Required if inline_message_id is not specified. Identifier of the message to edit""" """Required if inline_message_id is not specified. Identifier of the message to edit"""
inline_message_id: Optional[str] = None inline_message_id: Optional[str] = None
"""Required if chat_id and message_id are not specified. Identifier of the inline message""" """Required if chat_id and message_id are not specified. Identifier of the inline message"""
reply_markup: Optional[InlineKeyboardMarkup] = None reply_markup: Optional[InlineKeyboardMarkup] = None
"""A JSON-serialized object for a new inline keyboard.""" """A JSON-serialized object for a new inline keyboard."""
@ -37,7 +40,11 @@ class EditMessageMedia(TelegramMethod[Union[Message, bool]]):
return Request(method="editMessageMedia", data=data, files=files) return Request(method="editMessageMedia", data=data, files=files)
def prepare_media_file(self, data: Dict[str, Any], files: Dict[str, InputFile]) -> None: def prepare_media_file(self, data: Dict[str, Any], files: Dict[str, InputFile]) -> None:
if isinstance(data["media"]["media"], InputFile): if (
data["media"]
and "media" in data["media"]
and isinstance(data["media"]["media"], InputFile)
):
tag = secrets.token_urlsafe(10) tag = secrets.token_urlsafe(10)
files[tag] = data["media"].pop("media") # type: ignore files[tag] = data["media"].pop("media") # type: ignore
data["media"]["media"] = f"attach://{tag}" data["media"]["media"] = f"attach://{tag}"