#901 Fixed false-positive coercing of Union types in API methods (#912)

* #901 Fixed false-positive coercing of Union types in API methods

* Added default value for force_reply
This commit is contained in:
Alex Root Junior 2022-05-14 17:27:36 +03:00 committed by GitHub
parent 6ad242399b
commit 824b43c436
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 11 additions and 2 deletions

1
CHANGES/901.bugfix.rst Normal file
View file

@ -0,0 +1 @@
Fixed false-positive coercing of Union types in API methods

View file

@ -46,6 +46,7 @@ class TelegramMethod(abc.ABC, BaseModel, Generic[TelegramType]):
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
smart_union = True # https://github.com/aiogram/aiogram/issues/901
@root_validator(pre=True) @root_validator(pre=True)
def remove_unset(cls, values: Dict[str, Any]) -> Dict[str, Any]: def remove_unset(cls, values: Dict[str, Any]) -> Dict[str, Any]:

View file

@ -2,6 +2,8 @@ from __future__ import annotations
from typing import Optional from typing import Optional
from pydantic import Field
from .base import MutableTelegramObject from .base import MutableTelegramObject
@ -19,7 +21,7 @@ class ForceReply(MutableTelegramObject):
Source: https://core.telegram.org/bots/api#forcereply Source: https://core.telegram.org/bots/api#forcereply
""" """
force_reply: bool force_reply: bool = Field(True, const=True)
"""Shows reply interface to the user, as if they manually selected the bot's message and tapped 'Reply'""" """Shows reply interface to the user, as if they manually selected the bot's message and tapped 'Reply'"""
input_field_placeholder: Optional[str] = None input_field_placeholder: Optional[str] = None
"""*Optional*. The placeholder to be shown in the input field when the reply is active; 1-64 characters""" """*Optional*. The placeholder to be shown in the input field when the reply is active; 1-64 characters"""

View file

@ -3,7 +3,7 @@ import datetime
import pytest import pytest
from aiogram.methods import Request, SendMessage from aiogram.methods import Request, SendMessage
from aiogram.types import Chat, Message from aiogram.types import Chat, ForceReply, Message
from tests.mocked_bot import MockedBot from tests.mocked_bot import MockedBot
pytestmark = pytest.mark.asyncio pytestmark = pytest.mark.asyncio
@ -43,3 +43,8 @@ class TestSendMessage:
request: Request = bot.get_request() request: Request = bot.get_request()
assert request.method == "sendMessage" assert request.method == "sendMessage"
assert response == prepare_result.result assert response == prepare_result.result
async def test_force_reply(self):
# https://github.com/aiogram/aiogram/issues/901
method = SendMessage(text="test", chat_id=42, reply_markup=ForceReply())
assert isinstance(method.reply_markup, ForceReply)