Upgrade architecture + 5.0 Bot API (#469)

Upgrade architecture + 5.0 Bot API (#469)
* Moved `methods`, `types` and `client` to root package
* Removed update handler from routers to dispatcher
* Reworked events propagation mechanism to handlers
* Reworked inner middlewares logic (very small change)
* Updated to Bot API 5.0
* Initial migration from MkDocs to Sphinx + config for readthedocs
This commit is contained in:
Alex Root Junior 2021-01-26 21:20:52 +02:00 committed by GitHub
parent 566b7ff282
commit 4008a3114d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
608 changed files with 12537 additions and 6427 deletions

View file

@ -1,6 +1,6 @@
import pytest
from aiogram.api.methods import AddStickerToSet, Request
from aiogram.methods import AddStickerToSet, Request
from tests.mocked_bot import MockedBot

View file

@ -1,6 +1,6 @@
import pytest
from aiogram.api.methods import AnswerCallbackQuery, Request
from aiogram.methods import AnswerCallbackQuery, Request
from tests.mocked_bot import MockedBot

View file

@ -1,8 +1,8 @@
import pytest
from aiogram import Bot
from aiogram.api.methods import AnswerInlineQuery, Request
from aiogram.api.types import InlineQueryResult, InlineQueryResultPhoto
from aiogram.methods import AnswerInlineQuery, Request
from aiogram.types import InlineQueryResult, InlineQueryResultPhoto
from tests.mocked_bot import MockedBot

View file

@ -1,6 +1,6 @@
import pytest
from aiogram.api.methods import AnswerPreCheckoutQuery, Request
from aiogram.methods import AnswerPreCheckoutQuery, Request
from tests.mocked_bot import MockedBot

View file

@ -1,6 +1,6 @@
import pytest
from aiogram.api.methods import AnswerShippingQuery, Request
from aiogram.methods import AnswerShippingQuery, Request
from tests.mocked_bot import MockedBot

View file

@ -3,7 +3,7 @@ from typing import Dict, Optional
import pytest
from aiogram import Bot
from aiogram.api.methods.base import prepare_parse_mode
from aiogram.methods.base import prepare_parse_mode
from tests.mocked_bot import MockedBot

View file

@ -0,0 +1,26 @@
import pytest
from aiogram.methods import Close, Request
from tests.mocked_bot import MockedBot
class TestClose:
@pytest.mark.asyncio
async def test_method(self, bot: MockedBot):
prepare_result = bot.add_result_for(Close, ok=True, result=True)
response: bool = await Close()
request: Request = bot.get_request()
assert request.method == "close"
# assert request.data == {}
assert response == prepare_result.result
@pytest.mark.asyncio
async def test_bot_method(self, bot: MockedBot):
prepare_result = bot.add_result_for(Close, ok=True, result=True)
response: bool = await bot.close()
request: Request = bot.get_request()
assert request.method == "close"
# assert request.data == {}
assert response == prepare_result.result

View file

@ -0,0 +1,35 @@
import pytest
from aiogram.methods import CopyMessage, Request
from aiogram.types import MessageId
from tests.mocked_bot import MockedBot
class TestCopyMessage:
@pytest.mark.asyncio
async def test_method(self, bot: MockedBot):
prepare_result = bot.add_result_for(CopyMessage, ok=True, result=MessageId(message_id=42))
response: MessageId = await CopyMessage(
chat_id=42,
from_chat_id=42,
message_id=42,
)
request: Request = bot.get_request()
assert request.method == "copyMessage"
# assert request.data == {}
assert response == prepare_result.result
@pytest.mark.asyncio
async def test_bot_method(self, bot: MockedBot):
prepare_result = bot.add_result_for(CopyMessage, ok=True, result=MessageId(message_id=42))
response: MessageId = await bot.copy_message(
chat_id=42,
from_chat_id=42,
message_id=42,
)
request: Request = bot.get_request()
assert request.method == "copyMessage"
# assert request.data == {}
assert response == prepare_result.result

View file

@ -1,6 +1,6 @@
import pytest
from aiogram.api.methods import CreateNewStickerSet, Request
from aiogram.methods import CreateNewStickerSet, Request
from tests.mocked_bot import MockedBot

View file

@ -1,6 +1,6 @@
import pytest
from aiogram.api.methods import DeleteChatPhoto, Request
from aiogram.methods import DeleteChatPhoto, Request
from tests.mocked_bot import MockedBot

View file

@ -1,6 +1,6 @@
import pytest
from aiogram.api.methods import DeleteChatStickerSet, Request
from aiogram.methods import DeleteChatStickerSet, Request
from tests.mocked_bot import MockedBot

View file

@ -1,6 +1,6 @@
import pytest
from aiogram.api.methods import DeleteMessage, Request
from aiogram.methods import DeleteMessage, Request
from tests.mocked_bot import MockedBot

View file

@ -1,6 +1,6 @@
import pytest
from aiogram.api.methods import DeleteStickerFromSet, Request
from aiogram.methods import DeleteStickerFromSet, Request
from tests.mocked_bot import MockedBot

View file

@ -1,6 +1,6 @@
import pytest
from aiogram.api.methods import DeleteWebhook, Request
from aiogram.methods import DeleteWebhook, Request
from tests.mocked_bot import MockedBot

View file

@ -3,8 +3,8 @@ from typing import Union
import pytest
from aiogram.api.methods import EditMessageCaption, Request
from aiogram.api.types import Chat, Message
from aiogram.methods import EditMessageCaption, Request
from aiogram.types import Chat, Message
from tests.mocked_bot import MockedBot

View file

@ -2,8 +2,8 @@ from typing import Union
import pytest
from aiogram.api.methods import EditMessageLiveLocation, Request
from aiogram.api.types import Message
from aiogram.methods import EditMessageLiveLocation, Request
from aiogram.types import Message
from tests.mocked_bot import MockedBot

View file

@ -2,8 +2,8 @@ from typing import Union
import pytest
from aiogram.api.methods import EditMessageMedia, Request
from aiogram.api.types import BufferedInputFile, InputMedia, InputMediaPhoto, Message
from aiogram.methods import EditMessageMedia, Request
from aiogram.types import BufferedInputFile, InputMedia, InputMediaPhoto, Message
from tests.mocked_bot import MockedBot

View file

@ -2,8 +2,8 @@ from typing import Union
import pytest
from aiogram.api.methods import EditMessageReplyMarkup, Request
from aiogram.api.types import InlineKeyboardButton, InlineKeyboardMarkup, Message
from aiogram.methods import EditMessageReplyMarkup, Request
from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup, Message
from tests.mocked_bot import MockedBot

View file

@ -2,8 +2,8 @@ from typing import Union
import pytest
from aiogram.api.methods import EditMessageText, Request
from aiogram.api.types import Message
from aiogram.methods import EditMessageText, Request
from aiogram.types import Message
from tests.mocked_bot import MockedBot

View file

@ -1,6 +1,6 @@
import pytest
from aiogram.api.methods import ExportChatInviteLink, Request
from aiogram.methods import ExportChatInviteLink, Request
from tests.mocked_bot import MockedBot

View file

@ -2,8 +2,8 @@ import datetime
import pytest
from aiogram.api.methods import ForwardMessage, Request
from aiogram.api.types import Chat, Message
from aiogram.methods import ForwardMessage, Request
from aiogram.types import Chat, Message
from tests.mocked_bot import MockedBot

View file

@ -1,7 +1,7 @@
import pytest
from aiogram.api.methods import GetChat, Request
from aiogram.api.types import Chat
from aiogram.methods import GetChat, Request
from aiogram.types import Chat
from tests.mocked_bot import MockedBot

View file

@ -2,8 +2,8 @@ from typing import List
import pytest
from aiogram.api.methods import GetChatAdministrators, Request
from aiogram.api.types import ChatMember, User
from aiogram.methods import GetChatAdministrators, Request
from aiogram.types import ChatMember, User
from tests.mocked_bot import MockedBot

View file

@ -1,7 +1,7 @@
import pytest
from aiogram.api.methods import GetChatMember, Request
from aiogram.api.types import ChatMember, User
from aiogram.methods import GetChatMember, Request
from aiogram.types import ChatMember, User
from tests.mocked_bot import MockedBot

View file

@ -1,6 +1,6 @@
import pytest
from aiogram.api.methods import GetChatMembersCount, Request
from aiogram.methods import GetChatMembersCount, Request
from tests.mocked_bot import MockedBot

View file

@ -1,7 +1,7 @@
import pytest
from aiogram.api.methods import GetFile, Request
from aiogram.api.types import File
from aiogram.methods import GetFile, Request
from aiogram.types import File
from tests.mocked_bot import MockedBot

View file

@ -2,8 +2,8 @@ from typing import List
import pytest
from aiogram.api.methods import GetGameHighScores, Request
from aiogram.api.types import GameHighScore, User
from aiogram.methods import GetGameHighScores, Request
from aiogram.types import GameHighScore, User
from tests.mocked_bot import MockedBot

View file

@ -1,7 +1,7 @@
import pytest
from aiogram.api.methods import GetMe, Request
from aiogram.api.types import User
from aiogram.methods import GetMe, Request
from aiogram.types import User
from tests.mocked_bot import MockedBot

View file

@ -2,8 +2,8 @@ from typing import List
import pytest
from aiogram.api.methods import GetMyCommands, Request
from aiogram.api.types import BotCommand
from aiogram.methods import GetMyCommands, Request
from aiogram.types import BotCommand
from tests.mocked_bot import MockedBot

View file

@ -1,7 +1,7 @@
import pytest
from aiogram.api.methods import GetStickerSet, Request
from aiogram.api.types import Sticker, StickerSet
from aiogram.methods import GetStickerSet, Request
from aiogram.types import Sticker, StickerSet
from tests.mocked_bot import MockedBot

View file

@ -2,8 +2,8 @@ from typing import List
import pytest
from aiogram.api.methods import GetUpdates, Request
from aiogram.api.types import Update
from aiogram.methods import GetUpdates, Request
from aiogram.types import Update
from tests.mocked_bot import MockedBot

View file

@ -1,7 +1,7 @@
import pytest
from aiogram.api.methods import GetUserProfilePhotos, Request
from aiogram.api.types import PhotoSize, UserProfilePhotos
from aiogram.methods import GetUserProfilePhotos, Request
from aiogram.types import PhotoSize, UserProfilePhotos
from tests.mocked_bot import MockedBot

View file

@ -1,7 +1,7 @@
import pytest
from aiogram.api.methods import GetWebhookInfo, Request
from aiogram.api.types import WebhookInfo
from aiogram.methods import GetWebhookInfo, Request
from aiogram.types import WebhookInfo
from tests.mocked_bot import MockedBot

View file

@ -1,6 +1,6 @@
import pytest
from aiogram.api.methods import KickChatMember, Request
from aiogram.methods import KickChatMember, Request
from tests.mocked_bot import MockedBot

View file

@ -1,6 +1,6 @@
import pytest
from aiogram.api.methods import LeaveChat, Request
from aiogram.methods import LeaveChat, Request
from tests.mocked_bot import MockedBot

View file

@ -0,0 +1,26 @@
import pytest
from aiogram.methods import LogOut, Request
from tests.mocked_bot import MockedBot
class TestLogOut:
@pytest.mark.asyncio
async def test_method(self, bot: MockedBot):
prepare_result = bot.add_result_for(LogOut, ok=True, result=True)
response: bool = await LogOut()
request: Request = bot.get_request()
assert request.method == "logOut"
# assert request.data == {}
assert response == prepare_result.result
@pytest.mark.asyncio
async def test_bot_method(self, bot: MockedBot):
prepare_result = bot.add_result_for(LogOut, ok=True, result=True)
response: bool = await bot.log_out()
request: Request = bot.get_request()
assert request.method == "logOut"
# assert request.data == {}
assert response == prepare_result.result

View file

@ -1,6 +1,6 @@
import pytest
from aiogram.api.methods import PinChatMessage, Request
from aiogram.methods import PinChatMessage, Request
from tests.mocked_bot import MockedBot

View file

@ -1,6 +1,6 @@
import pytest
from aiogram.api.methods import PromoteChatMember, Request
from aiogram.methods import PromoteChatMember, Request
from tests.mocked_bot import MockedBot

View file

@ -1,7 +1,7 @@
import pytest
from aiogram.api.methods import Request, RestrictChatMember
from aiogram.api.types import ChatPermissions
from aiogram.methods import Request, RestrictChatMember
from aiogram.types import ChatPermissions
from tests.mocked_bot import MockedBot

View file

@ -2,8 +2,8 @@ import datetime
import pytest
from aiogram.api.methods import Request, SendAnimation
from aiogram.api.types import Animation, Chat, Message
from aiogram.methods import Request, SendAnimation
from aiogram.types import Animation, Chat, Message
from tests.mocked_bot import MockedBot

View file

@ -2,8 +2,8 @@ import datetime
import pytest
from aiogram.api.methods import Request, SendAudio
from aiogram.api.types import Audio, Chat, File, Message
from aiogram.methods import Request, SendAudio
from aiogram.types import Audio, Chat, File, Message
from tests.mocked_bot import MockedBot

View file

@ -1,6 +1,6 @@
import pytest
from aiogram.api.methods import Request, SendChatAction
from aiogram.methods import Request, SendChatAction
from tests.mocked_bot import MockedBot

View file

@ -2,8 +2,8 @@ import datetime
import pytest
from aiogram.api.methods import Request, SendContact
from aiogram.api.types import Chat, Contact, Message
from aiogram.methods import Request, SendContact
from aiogram.types import Chat, Contact, Message
from tests.mocked_bot import MockedBot

View file

@ -1,7 +1,7 @@
import pytest
from aiogram.api.methods import Request, SendDice
from aiogram.api.types import Message
from aiogram.methods import Request, SendDice
from aiogram.types import Message
from tests.mocked_bot import MockedBot

View file

@ -2,8 +2,8 @@ import datetime
import pytest
from aiogram.api.methods import Request, SendDocument
from aiogram.api.types import Chat, Document, Message
from aiogram.methods import Request, SendDocument
from aiogram.types import Chat, Document, Message
from tests.mocked_bot import MockedBot

View file

@ -2,8 +2,8 @@ import datetime
import pytest
from aiogram.api.methods import Request, SendGame
from aiogram.api.types import Chat, Game, Message, PhotoSize
from aiogram.methods import Request, SendGame
from aiogram.types import Chat, Game, Message, PhotoSize
from tests.mocked_bot import MockedBot

View file

@ -2,8 +2,8 @@ import datetime
import pytest
from aiogram.api.methods import Request, SendInvoice
from aiogram.api.types import Chat, Invoice, LabeledPrice, Message
from aiogram.methods import Request, SendInvoice
from aiogram.types import Chat, Invoice, LabeledPrice, Message
from tests.mocked_bot import MockedBot

View file

@ -2,8 +2,8 @@ import datetime
import pytest
from aiogram.api.methods import Request, SendLocation
from aiogram.api.types import Chat, Location, Message
from aiogram.methods import Request, SendLocation
from aiogram.types import Chat, Location, Message
from tests.mocked_bot import MockedBot

View file

@ -3,8 +3,8 @@ from typing import List
import pytest
from aiogram.api.methods import Request, SendMediaGroup
from aiogram.api.types import (
from aiogram.methods import Request, SendMediaGroup
from aiogram.types import (
BufferedInputFile,
Chat,
InputMediaPhoto,

View file

@ -2,8 +2,8 @@ import datetime
import pytest
from aiogram.api.methods import Request, SendMessage
from aiogram.api.types import Chat, Message
from aiogram.methods import Request, SendMessage
from aiogram.types import Chat, Message
from tests.mocked_bot import MockedBot

View file

@ -2,8 +2,8 @@ import datetime
import pytest
from aiogram.api.methods import Request, SendPhoto
from aiogram.api.types import Chat, Message, PhotoSize
from aiogram.methods import Request, SendPhoto
from aiogram.types import Chat, Message, PhotoSize
from tests.mocked_bot import MockedBot

View file

@ -2,8 +2,8 @@ import datetime
import pytest
from aiogram.api.methods import Request, SendPoll
from aiogram.api.types import Chat, Message, Poll, PollOption
from aiogram.methods import Request, SendPoll
from aiogram.types import Chat, Message, Poll, PollOption
from tests.mocked_bot import MockedBot

View file

@ -2,8 +2,8 @@ import datetime
import pytest
from aiogram.api.methods import Request, SendSticker
from aiogram.api.types import Chat, Message, Sticker
from aiogram.methods import Request, SendSticker
from aiogram.types import Chat, Message, Sticker
from tests.mocked_bot import MockedBot

View file

@ -2,8 +2,8 @@ import datetime
import pytest
from aiogram.api.methods import Request, SendVenue
from aiogram.api.types import Chat, Location, Message, Venue
from aiogram.methods import Request, SendVenue
from aiogram.types import Chat, Location, Message, Venue
from tests.mocked_bot import MockedBot

View file

@ -2,8 +2,8 @@ import datetime
import pytest
from aiogram.api.methods import Request, SendVideo
from aiogram.api.types import Chat, Message, Video
from aiogram.methods import Request, SendVideo
from aiogram.types import Chat, Message, Video
from tests.mocked_bot import MockedBot

View file

@ -2,8 +2,8 @@ import datetime
import pytest
from aiogram.api.methods import Request, SendVideoNote
from aiogram.api.types import BufferedInputFile, Chat, Message, VideoNote
from aiogram.methods import Request, SendVideoNote
from aiogram.types import BufferedInputFile, Chat, Message, VideoNote
from tests.mocked_bot import MockedBot

View file

@ -2,8 +2,8 @@ import datetime
import pytest
from aiogram.api.methods import Request, SendVoice
from aiogram.api.types import Chat, Message, Voice
from aiogram.methods import Request, SendVoice
from aiogram.types import Chat, Message, Voice
from tests.mocked_bot import MockedBot

View file

@ -1,6 +1,6 @@
import pytest
from aiogram.api.methods import Request, SetChatAdministratorCustomTitle, SetChatTitle
from aiogram.methods import Request, SetChatAdministratorCustomTitle, SetChatTitle
from tests.mocked_bot import MockedBot

View file

@ -1,6 +1,6 @@
import pytest
from aiogram.api.methods import Request, SetChatDescription
from aiogram.methods import Request, SetChatDescription
from tests.mocked_bot import MockedBot

View file

@ -1,7 +1,7 @@
import pytest
from aiogram.api.methods import Request, SetChatPermissions
from aiogram.api.types import ChatPermissions
from aiogram.methods import Request, SetChatPermissions
from aiogram.types import ChatPermissions
from tests.mocked_bot import MockedBot

View file

@ -1,7 +1,7 @@
import pytest
from aiogram.api.methods import Request, SetChatPhoto
from aiogram.api.types import BufferedInputFile, InputFile
from aiogram.methods import Request, SetChatPhoto
from aiogram.types import BufferedInputFile, InputFile
from tests.mocked_bot import MockedBot

View file

@ -1,6 +1,6 @@
import pytest
from aiogram.api.methods import Request, SetChatStickerSet
from aiogram.methods import Request, SetChatStickerSet
from tests.mocked_bot import MockedBot

View file

@ -1,6 +1,6 @@
import pytest
from aiogram.api.methods import Request, SetChatTitle
from aiogram.methods import Request, SetChatTitle
from tests.mocked_bot import MockedBot

View file

@ -2,8 +2,8 @@ from typing import Union
import pytest
from aiogram.api.methods import Request, SetGameScore
from aiogram.api.types import Message
from aiogram.methods import Request, SetGameScore
from aiogram.types import Message
from tests.mocked_bot import MockedBot

View file

@ -1,7 +1,7 @@
import pytest
from aiogram.api.methods import Request, SetMyCommands
from aiogram.api.types import BotCommand
from aiogram.methods import Request, SetMyCommands
from aiogram.types import BotCommand
from tests.mocked_bot import MockedBot
@ -21,7 +21,9 @@ class TestSetMyCommands:
async def test_bot_method(self, bot: MockedBot):
prepare_result = bot.add_result_for(SetMyCommands, ok=True, result=None)
response: bool = await bot.set_my_commands(commands=[],)
response: bool = await bot.set_my_commands(
commands=[],
)
request: Request = bot.get_request()
assert request.method == "setMyCommands"
# assert request.data == {}

View file

@ -1,7 +1,7 @@
import pytest
from aiogram.api.methods import Request, SetPassportDataErrors
from aiogram.api.types import PassportElementError
from aiogram.methods import Request, SetPassportDataErrors
from aiogram.types import PassportElementError
from tests.mocked_bot import MockedBot

View file

@ -1,6 +1,6 @@
import pytest
from aiogram.api.methods import Request, SetStickerPositionInSet
from aiogram.methods import Request, SetStickerPositionInSet
from tests.mocked_bot import MockedBot

View file

@ -1,6 +1,6 @@
import pytest
from aiogram.api.methods import Request, SetStickerSetThumb
from aiogram.methods import Request, SetStickerSetThumb
from tests.mocked_bot import MockedBot

View file

@ -1,6 +1,6 @@
import pytest
from aiogram.api.methods import Request, SetWebhook
from aiogram.methods import Request, SetWebhook
from tests.mocked_bot import MockedBot

View file

@ -2,8 +2,8 @@ from typing import Union
import pytest
from aiogram.api.methods import Request, StopMessageLiveLocation
from aiogram.api.types import Message
from aiogram.methods import Request, StopMessageLiveLocation
from aiogram.types import Message
from tests.mocked_bot import MockedBot

View file

@ -1,7 +1,7 @@
import pytest
from aiogram.api.methods import Request, StopPoll
from aiogram.api.types import Poll, PollOption
from aiogram.methods import Request, StopPoll
from aiogram.types import Poll, PollOption
from tests.mocked_bot import MockedBot

View file

@ -1,6 +1,6 @@
import pytest
from aiogram.api.methods import Request, UnbanChatMember
from aiogram.methods import Request, UnbanChatMember
from tests.mocked_bot import MockedBot

View file

@ -0,0 +1,30 @@
import pytest
from aiogram.methods import Request, UnpinAllChatMessages
from tests.mocked_bot import MockedBot
class TestUnpinAllChatMessages:
@pytest.mark.asyncio
async def test_method(self, bot: MockedBot):
prepare_result = bot.add_result_for(UnpinAllChatMessages, ok=True, result=True)
response: bool = await UnpinAllChatMessages(
chat_id=42,
)
request: Request = bot.get_request()
assert request.method == "unpinAllChatMessages"
# assert request.data == {}
assert response == prepare_result.result
@pytest.mark.asyncio
async def test_bot_method(self, bot: MockedBot):
prepare_result = bot.add_result_for(UnpinAllChatMessages, ok=True, result=True)
response: bool = await bot.unpin_all_chat_messages(
chat_id=42,
)
request: Request = bot.get_request()
assert request.method == "unpinAllChatMessages"
# assert request.data == {}
assert response == prepare_result.result

View file

@ -1,6 +1,6 @@
import pytest
from aiogram.api.methods import Request, UnpinChatMessage
from aiogram.methods import Request, UnpinChatMessage
from tests.mocked_bot import MockedBot

View file

@ -1,7 +1,7 @@
import pytest
from aiogram.api.methods import Request, UploadStickerFile
from aiogram.api.types import BufferedInputFile, File
from aiogram.methods import Request, UploadStickerFile
from aiogram.types import BufferedInputFile, File
from tests.mocked_bot import MockedBot