diff --git a/CHANGES/1418.bugfix.rst b/CHANGES/1418.bugfix.rst new file mode 100644 index 00000000..f933c89d --- /dev/null +++ b/CHANGES/1418.bugfix.rst @@ -0,0 +1,2 @@ +Fixed JSON serialization of the :code:`LinkPreviewOptions` class while it is passed +as bot-wide default options. diff --git a/aiogram/client/session/base.py b/aiogram/client/session/base.py index 503f5298..82ec4691 100644 --- a/aiogram/client/session/base.py +++ b/aiogram/client/session/base.py @@ -38,7 +38,7 @@ from aiogram.exceptions import ( from ...methods import Response, TelegramMethod from ...methods.base import TelegramType -from ...types import InputFile +from ...types import InputFile, TelegramObject from ..default import Default from ..telegram import PRODUCTION, TelegramAPIServer from .middlewares.manager import RequestMiddlewareManager @@ -233,7 +233,13 @@ class BaseSession(abc.ABC): return str(round(value.timestamp())) if isinstance(value, Enum): return self.prepare_value(value.value, bot=bot, files=files) - + if isinstance(value, TelegramObject): + return self.prepare_value( + value.model_dump(warnings=False), + bot=bot, + files=files, + _dumps_json=_dumps_json, + ) if _dumps_json: return self.json_dumps(value) return value diff --git a/tests/test_api/test_client/test_session/test_base_session.py b/tests/test_api/test_client/test_session/test_base_session.py index 0b078189..1a1b3c14 100644 --- a/tests/test_api/test_client/test_session/test_base_session.py +++ b/tests/test_api/test_client/test_session/test_base_session.py @@ -26,7 +26,7 @@ from aiogram.exceptions import ( TelegramUnauthorizedError, ) from aiogram.methods import DeleteMessage, GetMe, TelegramMethod -from aiogram.types import UNSET_PARSE_MODE, User +from aiogram.types import UNSET_PARSE_MODE, User, LinkPreviewOptions from aiogram.types.base import UNSET_DISABLE_WEB_PAGE_PREVIEW, UNSET_PROTECT_CONTENT from tests.mocked_bot import MockedBot @@ -111,6 +111,10 @@ class TestBaseSession: ), "1494994302", ], + [ + {"link_preview": LinkPreviewOptions(is_disabled=True)}, + '{"link_preview": {"is_disabled": true}}', + ], ], ) def test_prepare_value(self, value: Any, result: str, bot: MockedBot):