From 28941439cf3c75524eee79c4857a5eee431a68cf Mon Sep 17 00:00:00 2001 From: JRoot Junior Date: Fri, 7 Mar 2025 00:42:13 +0200 Subject: [PATCH] Refactor type unions with ResultChatMemberUnion and ResultMenuButtonUnion Replaced verbose type definitions of chat member and menu button unions with `ResultChatMemberUnion` and `ResultMenuButtonUnion` for improved readability and maintainability. Updated relevant methods, modules, and documentation to use the new type aliases consistently. --- aiogram/client/bot.py | 33 +++-------------- aiogram/methods/base.py | 2 +- aiogram/methods/get_chat_administrators.py | 38 +++----------------- aiogram/methods/get_chat_member.py | 34 +++--------------- aiogram/methods/get_chat_menu_button.py | 10 +++--- aiogram/types/__init__.py | 4 +++ aiogram/types/result_chat_member_union.py | 17 +++++++++ aiogram/types/result_menu_button_union.py | 7 ++++ docs/api/methods/get_chat_administrators.rst | 6 ++-- docs/api/methods/get_chat_member.rst | 6 ++-- docs/api/methods/get_chat_menu_button.rst | 6 ++-- 11 files changed, 55 insertions(+), 108 deletions(-) create mode 100644 aiogram/types/result_chat_member_union.py create mode 100644 aiogram/types/result_menu_button_union.py diff --git a/aiogram/client/bot.py b/aiogram/client/bot.py index fb46eca2..eb936a4a 100644 --- a/aiogram/client/bot.py +++ b/aiogram/client/bot.py @@ -169,12 +169,6 @@ from ..types import ( ChatFullInfo, ChatIdUnion, ChatInviteLink, - ChatMemberAdministrator, - ChatMemberBanned, - ChatMemberLeft, - ChatMemberMember, - ChatMemberOwner, - ChatMemberRestricted, ChatPermissions, DateTimeUnion, Downloadable, @@ -195,10 +189,7 @@ from ..types import ( LinkPreviewOptions, MaskPosition, MediaUnion, - MenuButtonCommands, - MenuButtonDefault, MenuButtonUnion, - MenuButtonWebApp, Message, MessageEntity, MessageId, @@ -208,6 +199,8 @@ from ..types import ( ReactionTypeUnion, ReplyMarkupUnion, ReplyParameters, + ResultChatMemberUnion, + ResultMenuButtonUnion, SentWebAppMessage, ShippingOption, StarTransactions, @@ -1574,16 +1567,7 @@ class Bot: self, chat_id: ChatIdUnion, request_timeout: Optional[int] = None, - ) -> list[ - Union[ - ChatMemberOwner, - ChatMemberAdministrator, - ChatMemberMember, - ChatMemberRestricted, - ChatMemberLeft, - ChatMemberBanned, - ] - ]: + ) -> list[ResultChatMemberUnion]: """ Use this method to get a list of administrators in a chat, which aren't bots. Returns an Array of :class:`aiogram.types.chat_member.ChatMember` objects. @@ -1604,14 +1588,7 @@ class Bot: chat_id: ChatIdUnion, user_id: int, request_timeout: Optional[int] = None, - ) -> Union[ - ChatMemberOwner, - ChatMemberAdministrator, - ChatMemberMember, - ChatMemberRestricted, - ChatMemberLeft, - ChatMemberBanned, - ]: + ) -> ResultChatMemberUnion: """ Use this method to get information about a member of a chat. The method is only guaranteed to work for other users if the bot is an administrator in the chat. Returns a :class:`aiogram.types.chat_member.ChatMember` object on success. @@ -1653,7 +1630,7 @@ class Bot: self, chat_id: Optional[int] = None, request_timeout: Optional[int] = None, - ) -> Union[MenuButtonDefault, MenuButtonWebApp, MenuButtonCommands]: + ) -> ResultMenuButtonUnion: """ Use this method to get the current value of the bot's menu button in a private chat, or the default menu button. Returns :class:`aiogram.types.menu_button.MenuButton` on success. diff --git a/aiogram/methods/base.py b/aiogram/methods/base.py index 3279199a..36878a84 100644 --- a/aiogram/methods/base.py +++ b/aiogram/methods/base.py @@ -66,7 +66,7 @@ class TelegramMethod(BotContextController, BaseModel, Generic[TelegramType], ABC return {k: v for k, v in values.items() if not isinstance(v, UNSET_TYPE)} if TYPE_CHECKING: - __returning__: ClassVar[type] + __returning__: ClassVar[Any] __api_method__: ClassVar[str] else: diff --git a/aiogram/methods/get_chat_administrators.py b/aiogram/methods/get_chat_administrators.py index 76cf4383..6185116e 100644 --- a/aiogram/methods/get_chat_administrators.py +++ b/aiogram/methods/get_chat_administrators.py @@ -1,49 +1,19 @@ from __future__ import annotations -from typing import TYPE_CHECKING, Any, Union +from typing import TYPE_CHECKING, Any -from ..types import ( - ChatIdUnion, - ChatMemberAdministrator, - ChatMemberBanned, - ChatMemberLeft, - ChatMemberMember, - ChatMemberOwner, - ChatMemberRestricted, -) +from ..types import ChatIdUnion, ResultChatMemberUnion from .base import TelegramMethod -class GetChatAdministrators( - TelegramMethod[ - list[ - Union[ - ChatMemberOwner, - ChatMemberAdministrator, - ChatMemberMember, - ChatMemberRestricted, - ChatMemberLeft, - ChatMemberBanned, - ] - ] - ] -): +class GetChatAdministrators(TelegramMethod[list[ResultChatMemberUnion]]): """ Use this method to get a list of administrators in a chat, which aren't bots. Returns an Array of :class:`aiogram.types.chat_member.ChatMember` objects. Source: https://core.telegram.org/bots/api#getchatadministrators """ - __returning__ = list[ - Union[ - ChatMemberOwner, - ChatMemberAdministrator, - ChatMemberMember, - ChatMemberRestricted, - ChatMemberLeft, - ChatMemberBanned, - ] - ] + __returning__ = list[ResultChatMemberUnion] __api_method__ = "getChatAdministrators" chat_id: ChatIdUnion diff --git a/aiogram/methods/get_chat_member.py b/aiogram/methods/get_chat_member.py index 454b4d66..a2550af8 100644 --- a/aiogram/methods/get_chat_member.py +++ b/aiogram/methods/get_chat_member.py @@ -1,45 +1,19 @@ from __future__ import annotations -from typing import TYPE_CHECKING, Any, Union +from typing import TYPE_CHECKING, Any -from ..types import ( - ChatIdUnion, - ChatMemberAdministrator, - ChatMemberBanned, - ChatMemberLeft, - ChatMemberMember, - ChatMemberOwner, - ChatMemberRestricted, -) +from ..types import ChatIdUnion, ResultChatMemberUnion from .base import TelegramMethod -class GetChatMember( - TelegramMethod[ - Union[ - ChatMemberOwner, - ChatMemberAdministrator, - ChatMemberMember, - ChatMemberRestricted, - ChatMemberLeft, - ChatMemberBanned, - ] - ] -): +class GetChatMember(TelegramMethod[ResultChatMemberUnion]): """ Use this method to get information about a member of a chat. The method is only guaranteed to work for other users if the bot is an administrator in the chat. Returns a :class:`aiogram.types.chat_member.ChatMember` object on success. Source: https://core.telegram.org/bots/api#getchatmember """ - __returning__ = Union[ - ChatMemberOwner, - ChatMemberAdministrator, - ChatMemberMember, - ChatMemberRestricted, - ChatMemberLeft, - ChatMemberBanned, - ] + __returning__ = ResultChatMemberUnion __api_method__ = "getChatMember" chat_id: ChatIdUnion diff --git a/aiogram/methods/get_chat_menu_button.py b/aiogram/methods/get_chat_menu_button.py index ee1248d0..5c7e06c8 100644 --- a/aiogram/methods/get_chat_menu_button.py +++ b/aiogram/methods/get_chat_menu_button.py @@ -1,21 +1,19 @@ from __future__ import annotations -from typing import TYPE_CHECKING, Any, Optional, Union +from typing import TYPE_CHECKING, Any, Optional -from ..types import MenuButtonCommands, MenuButtonDefault, MenuButtonWebApp +from ..types import ResultMenuButtonUnion from .base import TelegramMethod -class GetChatMenuButton( - TelegramMethod[Union[MenuButtonDefault, MenuButtonWebApp, MenuButtonCommands]] -): +class GetChatMenuButton(TelegramMethod[ResultMenuButtonUnion]): """ Use this method to get the current value of the bot's menu button in a private chat, or the default menu button. Returns :class:`aiogram.types.menu_button.MenuButton` on success. Source: https://core.telegram.org/bots/api#getchatmenubutton """ - __returning__ = Union[MenuButtonDefault, MenuButtonWebApp, MenuButtonCommands] + __returning__ = ResultMenuButtonUnion __api_method__ = "getChatMenuButton" chat_id: Optional[int] = None diff --git a/aiogram/types/__init__.py b/aiogram/types/__init__.py index 6339e57e..7b07990d 100644 --- a/aiogram/types/__init__.py +++ b/aiogram/types/__init__.py @@ -220,6 +220,8 @@ from .reply_keyboard_remove import ReplyKeyboardRemove from .reply_markup_union import ReplyMarkupUnion from .reply_parameters import ReplyParameters from .response_parameters import ResponseParameters +from .result_chat_member_union import ResultChatMemberUnion +from .result_menu_button_union import ResultMenuButtonUnion from .revenue_withdrawal_state import RevenueWithdrawalState from .revenue_withdrawal_state_failed import RevenueWithdrawalStateFailed from .revenue_withdrawal_state_pending import RevenueWithdrawalStatePending @@ -485,6 +487,8 @@ __all__ = ( "ReplyMarkupUnion", "ReplyParameters", "ResponseParameters", + "ResultChatMemberUnion", + "ResultMenuButtonUnion", "RevenueWithdrawalState", "RevenueWithdrawalStateFailed", "RevenueWithdrawalStatePending", diff --git a/aiogram/types/result_chat_member_union.py b/aiogram/types/result_chat_member_union.py new file mode 100644 index 00000000..f4dc741d --- /dev/null +++ b/aiogram/types/result_chat_member_union.py @@ -0,0 +1,17 @@ +from typing import Union + +from .chat_member_administrator import ChatMemberAdministrator +from .chat_member_banned import ChatMemberBanned +from .chat_member_left import ChatMemberLeft +from .chat_member_member import ChatMemberMember +from .chat_member_owner import ChatMemberOwner +from .chat_member_restricted import ChatMemberRestricted + +ResultChatMemberUnion = Union[ + ChatMemberOwner, + ChatMemberAdministrator, + ChatMemberMember, + ChatMemberRestricted, + ChatMemberLeft, + ChatMemberBanned, +] diff --git a/aiogram/types/result_menu_button_union.py b/aiogram/types/result_menu_button_union.py new file mode 100644 index 00000000..74c47b2c --- /dev/null +++ b/aiogram/types/result_menu_button_union.py @@ -0,0 +1,7 @@ +from typing import Union + +from .menu_button_commands import MenuButtonCommands +from .menu_button_default import MenuButtonDefault +from .menu_button_web_app import MenuButtonWebApp + +ResultMenuButtonUnion = Union[MenuButtonDefault, MenuButtonWebApp, MenuButtonCommands] diff --git a/docs/api/methods/get_chat_administrators.rst b/docs/api/methods/get_chat_administrators.rst index 6e036436..7936090e 100644 --- a/docs/api/methods/get_chat_administrators.rst +++ b/docs/api/methods/get_chat_administrators.rst @@ -2,7 +2,7 @@ getChatAdministrators ##################### -Returns: :obj:`list[Union[ChatMemberOwner, ChatMemberAdministrator, ChatMemberMember, ChatMemberRestricted, ChatMemberLeft, ChatMemberBanned]]` +Returns: :obj:`list[ResultChatMemberUnion]` .. automodule:: aiogram.methods.get_chat_administrators :members: @@ -19,7 +19,7 @@ As bot method .. code-block:: - result: list[Union[ChatMemberOwner, ChatMemberAdministrator, ChatMemberMember, ChatMemberRestricted, ChatMemberLeft, ChatMemberBanned]] = await bot.get_chat_administrators(...) + result: list[ResultChatMemberUnion] = await bot.get_chat_administrators(...) Method as object @@ -35,7 +35,7 @@ With specific bot .. code-block:: python - result: list[Union[ChatMemberOwner, ChatMemberAdministrator, ChatMemberMember, ChatMemberRestricted, ChatMemberLeft, ChatMemberBanned]] = await bot(GetChatAdministrators(...)) + result: list[ResultChatMemberUnion] = await bot(GetChatAdministrators(...)) diff --git a/docs/api/methods/get_chat_member.rst b/docs/api/methods/get_chat_member.rst index 60742bf6..653eb7f6 100644 --- a/docs/api/methods/get_chat_member.rst +++ b/docs/api/methods/get_chat_member.rst @@ -2,7 +2,7 @@ getChatMember ############# -Returns: :obj:`Union[ChatMemberOwner, ChatMemberAdministrator, ChatMemberMember, ChatMemberRestricted, ChatMemberLeft, ChatMemberBanned]` +Returns: :obj:`ResultChatMemberUnion` .. automodule:: aiogram.methods.get_chat_member :members: @@ -19,7 +19,7 @@ As bot method .. code-block:: - result: Union[ChatMemberOwner, ChatMemberAdministrator, ChatMemberMember, ChatMemberRestricted, ChatMemberLeft, ChatMemberBanned] = await bot.get_chat_member(...) + result: ResultChatMemberUnion = await bot.get_chat_member(...) Method as object @@ -35,7 +35,7 @@ With specific bot .. code-block:: python - result: Union[ChatMemberOwner, ChatMemberAdministrator, ChatMemberMember, ChatMemberRestricted, ChatMemberLeft, ChatMemberBanned] = await bot(GetChatMember(...)) + result: ResultChatMemberUnion = await bot(GetChatMember(...)) diff --git a/docs/api/methods/get_chat_menu_button.rst b/docs/api/methods/get_chat_menu_button.rst index e70fddb0..16ae0bc4 100644 --- a/docs/api/methods/get_chat_menu_button.rst +++ b/docs/api/methods/get_chat_menu_button.rst @@ -2,7 +2,7 @@ getChatMenuButton ################# -Returns: :obj:`Union[MenuButtonDefault, MenuButtonWebApp, MenuButtonCommands]` +Returns: :obj:`ResultMenuButtonUnion` .. automodule:: aiogram.methods.get_chat_menu_button :members: @@ -19,7 +19,7 @@ As bot method .. code-block:: - result: Union[MenuButtonDefault, MenuButtonWebApp, MenuButtonCommands] = await bot.get_chat_menu_button(...) + result: ResultMenuButtonUnion = await bot.get_chat_menu_button(...) Method as object @@ -35,4 +35,4 @@ With specific bot .. code-block:: python - result: Union[MenuButtonDefault, MenuButtonWebApp, MenuButtonCommands] = await bot(GetChatMenuButton(...)) + result: ResultMenuButtonUnion = await bot(GetChatMenuButton(...))