From d3b488e16d4a75033d5ba7c9436d89f43db6ecb0 Mon Sep 17 00:00:00 2001 From: Alex Root Junior Date: Wed, 18 Nov 2020 02:05:52 +0200 Subject: [PATCH] Refactor dispatcher. Update docs. Fix tests. --- aiogram/dispatcher/dispatcher.py | 87 +- aiogram/dispatcher/event/bases.py | 2 +- aiogram/dispatcher/event/telegram.py | 19 +- aiogram/dispatcher/filters/__init__.py | 1 - aiogram/dispatcher/middlewares/error.py | 12 +- aiogram/dispatcher/router.py | 82 +- aiogram/methods/send_animation.py | 2 +- docs2/api/bot.rst | 6 +- docs2/api/download_file.rst | 5 +- docs2/api/index.rst | 2 +- docs2/api/methods/add_sticker_to_set.rst | 6 +- docs2/api/methods/answer_callback_query.rst | 6 +- docs2/api/methods/answer_inline_query.rst | 6 +- .../api/methods/answer_pre_checkout_query.rst | 6 +- docs2/api/methods/answer_shipping_query.rst | 6 +- docs2/api/methods/create_new_sticker_set.rst | 6 +- docs2/api/methods/delete_chat_photo.rst | 6 +- docs2/api/methods/delete_chat_sticker_set.rst | 6 +- docs2/api/methods/delete_message.rst | 6 +- docs2/api/methods/delete_sticker_from_set.rst | 6 +- docs2/api/methods/delete_webhook.rst | 6 +- docs2/api/methods/edit_message_caption.rst | 6 +- .../methods/edit_message_live_location.rst | 6 +- docs2/api/methods/edit_message_media.rst | 6 +- .../api/methods/edit_message_reply_markup.rst | 6 +- docs2/api/methods/edit_message_text.rst | 6 +- docs2/api/methods/export_chat_invite_link.rst | 6 +- docs2/api/methods/forward_message.rst | 6 +- docs2/api/methods/get_chat.rst | 6 +- docs2/api/methods/get_chat_administrators.rst | 6 +- docs2/api/methods/get_chat_member.rst | 6 +- docs2/api/methods/get_chat_members_count.rst | 6 +- docs2/api/methods/get_file.rst | 6 +- docs2/api/methods/get_game_high_scores.rst | 6 +- docs2/api/methods/get_me.rst | 6 +- docs2/api/methods/get_my_commands.rst | 6 +- docs2/api/methods/get_sticker_set.rst | 6 +- docs2/api/methods/get_updates.rst | 6 +- docs2/api/methods/get_user_profile_photos.rst | 6 +- docs2/api/methods/get_webhook_info.rst | 6 +- docs2/api/methods/index.rst | 4 +- docs2/api/methods/kick_chat_member.rst | 6 +- docs2/api/methods/leave_chat.rst | 6 +- docs2/api/methods/pin_chat_message.rst | 6 +- docs2/api/methods/promote_chat_member.rst | 6 +- docs2/api/methods/restrict_chat_member.rst | 6 +- docs2/api/methods/send_animation.rst | 6 +- docs2/api/methods/send_audio.rst | 6 +- docs2/api/methods/send_chat_action.rst | 6 +- docs2/api/methods/send_contact.rst | 6 +- docs2/api/methods/send_dice.rst | 6 +- docs2/api/methods/send_document.rst | 6 +- docs2/api/methods/send_game.rst | 6 +- docs2/api/methods/send_invoice.rst | 6 +- docs2/api/methods/send_location.rst | 6 +- docs2/api/methods/send_media_group.rst | 6 +- docs2/api/methods/send_message.rst | 6 +- docs2/api/methods/send_photo.rst | 6 +- docs2/api/methods/send_poll.rst | 6 +- docs2/api/methods/send_sticker.rst | 6 +- docs2/api/methods/send_venue.rst | 6 +- docs2/api/methods/send_video.rst | 6 +- docs2/api/methods/send_video_note.rst | 6 +- docs2/api/methods/send_voice.rst | 6 +- .../set_chat_administrator_custom_title.rst | 6 +- docs2/api/methods/set_chat_description.rst | 6 +- docs2/api/methods/set_chat_permissions.rst | 6 +- docs2/api/methods/set_chat_photo.rst | 6 +- docs2/api/methods/set_chat_sticker_set.rst | 6 +- docs2/api/methods/set_chat_title.rst | 6 +- docs2/api/methods/set_game_score.rst | 6 +- docs2/api/methods/set_my_commands.rst | 6 +- .../api/methods/set_passport_data_errors.rst | 6 +- .../methods/set_sticker_position_in_set.rst | 6 +- docs2/api/methods/set_sticker_set_thumb.rst | 6 +- docs2/api/methods/set_webhook.rst | 6 +- .../methods/stop_message_live_location.rst | 6 +- docs2/api/methods/stop_poll.rst | 6 +- docs2/api/methods/unban_chat_member.rst | 6 +- docs2/api/methods/unpin_chat_message.rst | 6 +- docs2/api/methods/upload_sticker_file.rst | 6 +- docs2/api/session/aiohttp.rst | 9 +- docs2/api/session/base.rst | 2 +- docs2/api/types/animation.rst | 2 +- docs2/api/types/audio.rst | 2 +- docs2/api/types/bot_command.rst | 2 +- docs2/api/types/callback_game.rst | 2 +- docs2/api/types/callback_query.rst | 2 +- docs2/api/types/chat.rst | 2 +- docs2/api/types/chat_member.rst | 2 +- docs2/api/types/chat_permissions.rst | 2 +- docs2/api/types/chat_photo.rst | 2 +- docs2/api/types/chosen_inline_result.rst | 2 +- docs2/api/types/contact.rst | 2 +- docs2/api/types/dice.rst | 2 +- docs2/api/types/document.rst | 2 +- docs2/api/types/encrypted_credentials.rst | 2 +- .../api/types/encrypted_passport_element.rst | 2 +- docs2/api/types/file.rst | 2 +- docs2/api/types/force_reply.rst | 2 +- docs2/api/types/game.rst | 2 +- docs2/api/types/game_high_score.rst | 2 +- docs2/api/types/index.rst | 2 +- docs2/api/types/inline_keyboard_button.rst | 2 +- docs2/api/types/inline_keyboard_markup.rst | 2 +- docs2/api/types/inline_query.rst | 2 +- docs2/api/types/inline_query_result.rst | 2 +- .../api/types/inline_query_result_article.rst | 2 +- docs2/api/types/inline_query_result_audio.rst | 2 +- .../inline_query_result_cached_audio.rst | 2 +- .../inline_query_result_cached_document.rst | 2 +- .../types/inline_query_result_cached_gif.rst | 2 +- .../inline_query_result_cached_mpeg4_gif.rst | 2 +- .../inline_query_result_cached_photo.rst | 2 +- .../inline_query_result_cached_sticker.rst | 2 +- .../inline_query_result_cached_video.rst | 2 +- .../inline_query_result_cached_voice.rst | 2 +- .../api/types/inline_query_result_contact.rst | 2 +- .../types/inline_query_result_document.rst | 2 +- docs2/api/types/inline_query_result_game.rst | 2 +- docs2/api/types/inline_query_result_gif.rst | 2 +- .../types/inline_query_result_location.rst | 2 +- .../types/inline_query_result_mpeg4_gif.rst | 2 +- docs2/api/types/inline_query_result_photo.rst | 2 +- docs2/api/types/inline_query_result_venue.rst | 2 +- docs2/api/types/inline_query_result_video.rst | 2 +- docs2/api/types/inline_query_result_voice.rst | 2 +- .../types/input_contact_message_content.rst | 2 +- docs2/api/types/input_file.rst | 2 +- .../types/input_location_message_content.rst | 2 +- docs2/api/types/input_media.rst | 2 +- docs2/api/types/input_media_animation.rst | 2 +- docs2/api/types/input_media_audio.rst | 2 +- docs2/api/types/input_media_document.rst | 2 +- docs2/api/types/input_media_photo.rst | 2 +- docs2/api/types/input_media_video.rst | 2 +- docs2/api/types/input_message_content.rst | 2 +- .../api/types/input_text_message_content.rst | 2 +- .../api/types/input_venue_message_content.rst | 2 +- docs2/api/types/invoice.rst | 2 +- docs2/api/types/keyboard_button.rst | 2 +- docs2/api/types/keyboard_button_poll_type.rst | 2 +- docs2/api/types/labeled_price.rst | 2 +- docs2/api/types/location.rst | 2 +- docs2/api/types/login_url.rst | 2 +- docs2/api/types/mask_position.rst | 2 +- docs2/api/types/message.rst | 2 +- docs2/api/types/message_entity.rst | 2 +- docs2/api/types/order_info.rst | 2 +- docs2/api/types/passport_data.rst | 2 +- docs2/api/types/passport_element_error.rst | 2 +- .../passport_element_error_data_field.rst | 2 +- .../api/types/passport_element_error_file.rst | 2 +- .../types/passport_element_error_files.rst | 2 +- .../passport_element_error_front_side.rst | 2 +- .../passport_element_error_reverse_side.rst | 2 +- .../types/passport_element_error_selfie.rst | 2 +- ...assport_element_error_translation_file.rst | 2 +- ...ssport_element_error_translation_files.rst | 2 +- .../passport_element_error_unspecified.rst | 2 +- docs2/api/types/passport_file.rst | 2 +- docs2/api/types/photo_size.rst | 2 +- docs2/api/types/poll.rst | 2 +- docs2/api/types/poll_answer.rst | 2 +- docs2/api/types/poll_option.rst | 2 +- docs2/api/types/pre_checkout_query.rst | 2 +- docs2/api/types/reply_keyboard_markup.rst | 2 +- docs2/api/types/reply_keyboard_remove.rst | 2 +- docs2/api/types/response_parameters.rst | 2 +- docs2/api/types/shipping_address.rst | 2 +- docs2/api/types/shipping_option.rst | 2 +- docs2/api/types/shipping_query.rst | 2 +- docs2/api/types/sticker.rst | 2 +- docs2/api/types/sticker_set.rst | 2 +- docs2/api/types/successful_payment.rst | 2 +- docs2/api/types/update.rst | 2 +- docs2/api/types/user.rst | 2 +- docs2/api/types/user_profile_photos.rst | 2 +- docs2/api/types/venue.rst | 2 +- docs2/api/types/video.rst | 2 +- docs2/api/types/video_note.rst | 2 +- docs2/api/types/voice.rst | 2 +- docs2/api/types/webhook_info.rst | 2 +- docs2/api/upload_file.rst | 6 +- docs2/conf.py | 14 +- poetry.lock | 2046 ++++++++++------- pyproject.toml | 5 +- tests/mocked_bot.py | 6 +- tests/test_api/test_client/test_api_server.py | 2 +- tests/test_api/test_client/test_bot.py | 12 +- .../test_session/test_aiohttp_session.py | 10 +- .../test_session/test_base_session.py | 6 +- .../test_methods/test_add_sticker_to_set.py | 2 +- .../test_answer_callback_query.py | 2 +- .../test_methods/test_answer_inline_query.py | 4 +- .../test_answer_pre_checkout_query.py | 2 +- .../test_answer_shipping_query.py | 2 +- tests/test_api/test_methods/test_base.py | 2 +- .../test_create_new_sticker_set.py | 2 +- .../test_methods/test_delete_chat_photo.py | 2 +- .../test_delete_chat_sticker_set.py | 2 +- .../test_methods/test_delete_message.py | 2 +- .../test_delete_sticker_from_set.py | 2 +- .../test_methods/test_delete_webhook.py | 2 +- .../test_methods/test_edit_message_caption.py | 4 +- .../test_edit_message_live_location.py | 4 +- .../test_methods/test_edit_message_media.py | 4 +- .../test_edit_message_reply_markup.py | 4 +- .../test_methods/test_edit_message_text.py | 4 +- .../test_export_chat_invite_link.py | 2 +- .../test_methods/test_forward_message.py | 4 +- tests/test_api/test_methods/test_get_chat.py | 4 +- .../test_get_chat_administrators.py | 4 +- .../test_methods/test_get_chat_member.py | 4 +- .../test_get_chat_members_count.py | 2 +- tests/test_api/test_methods/test_get_file.py | 4 +- .../test_methods/test_get_game_high_scores.py | 4 +- tests/test_api/test_methods/test_get_me.py | 4 +- .../test_methods/test_get_my_commands.py | 4 +- .../test_methods/test_get_sticker_set.py | 4 +- .../test_api/test_methods/test_get_updates.py | 4 +- .../test_get_user_profile_photos.py | 4 +- .../test_methods/test_get_webhook_info.py | 4 +- .../test_methods/test_kick_chat_member.py | 2 +- .../test_api/test_methods/test_leave_chat.py | 2 +- .../test_methods/test_pin_chat_message.py | 2 +- .../test_methods/test_promote_chat_member.py | 2 +- .../test_methods/test_restrict_chat_member.py | 4 +- .../test_methods/test_send_animation.py | 4 +- .../test_api/test_methods/test_send_audio.py | 4 +- .../test_methods/test_send_chat_action.py | 2 +- .../test_methods/test_send_contact.py | 4 +- tests/test_api/test_methods/test_send_dice.py | 4 +- .../test_methods/test_send_document.py | 4 +- tests/test_api/test_methods/test_send_game.py | 4 +- .../test_methods/test_send_invoice.py | 4 +- .../test_methods/test_send_location.py | 4 +- .../test_methods/test_send_media_group.py | 4 +- .../test_methods/test_send_message.py | 4 +- .../test_api/test_methods/test_send_photo.py | 4 +- tests/test_api/test_methods/test_send_poll.py | 4 +- .../test_methods/test_send_sticker.py | 4 +- .../test_api/test_methods/test_send_venue.py | 4 +- .../test_api/test_methods/test_send_video.py | 4 +- .../test_methods/test_send_video_note.py | 4 +- .../test_api/test_methods/test_send_voice.py | 4 +- ...est_set_chat_administrator_custom_title.py | 2 +- .../test_methods/test_set_chat_description.py | 2 +- .../test_methods/test_set_chat_permissions.py | 4 +- .../test_methods/test_set_chat_photo.py | 4 +- .../test_methods/test_set_chat_sticker_set.py | 2 +- .../test_methods/test_set_chat_title.py | 2 +- .../test_methods/test_set_game_score.py | 4 +- .../test_methods/test_set_my_commands.py | 4 +- .../test_set_passport_data_errors.py | 4 +- .../test_set_sticker_position_in_set.py | 2 +- .../test_set_sticker_set_thumb.py | 2 +- .../test_api/test_methods/test_set_webhook.py | 2 +- .../test_stop_message_live_location.py | 4 +- tests/test_api/test_methods/test_stop_poll.py | 4 +- .../test_methods/test_unban_chat_member.py | 2 +- .../test_methods/test_unpin_chat_message.py | 2 +- .../test_methods/test_upload_sticker_file.py | 4 +- .../test_types/test_callback_query.py | 4 +- tests/test_api/test_types/test_chat_member.py | 2 +- .../test_api/test_types/test_inline_query.py | 4 +- tests/test_api/test_types/test_input_file.py | 2 +- tests/test_api/test_types/test_message.py | 4 +- .../test_types/test_pre_checkout_query.py | 4 +- .../test_types/test_reply_keyboard_remove.py | 2 +- .../test_types/test_shipping_query.py | 4 +- tests/test_api/test_types/test_user.py | 2 +- tests/test_dispatcher/test_deprecated.py | 1 - tests/test_dispatcher/test_dispatcher.py | 352 ++- .../test_event/test_handler.py | 2 +- .../test_event/test_telegram.py | 2 +- .../test_filters/test_command.py | 4 +- .../test_filters/test_content_types.py | 2 +- .../test_dispatcher/test_filters/test_text.py | 2 +- .../test_dispatcher/test_handler/test_base.py | 2 +- .../test_handler/test_callback_query.py | 2 +- .../test_handler/test_chosen_inline_result.py | 2 +- .../test_handler/test_error.py | 2 +- .../test_handler/test_inline_query.py | 2 +- .../test_handler/test_message.py | 2 +- .../test_dispatcher/test_handler/test_poll.py | 2 +- .../test_handler/test_pre_checkout_query.py | 2 +- .../test_handler/test_shipping_query.py | 2 +- tests/test_dispatcher/test_router.py | 330 +-- tests/test_utils/test_text_decorations.py | 2 +- 290 files changed, 2153 insertions(+), 1780 deletions(-) diff --git a/aiogram/dispatcher/dispatcher.py b/aiogram/dispatcher/dispatcher.py index c780e397..8e99731f 100644 --- a/aiogram/dispatcher/dispatcher.py +++ b/aiogram/dispatcher/dispatcher.py @@ -7,11 +7,13 @@ from asyncio import CancelledError, Future, Lock from typing import Any, AsyncGenerator, Dict, Optional, Union from .. import loggers -from aiogram.client.bot import Bot +from ..client.bot import Bot from ..methods import TelegramMethod from ..types import Update, User from ..utils.exceptions import TelegramAPIError -from .event.bases import NOT_HANDLED +from .event.bases import UNHANDLED, SkipHandler +from .event.telegram import TelegramEventObserver +from .middlewares.error import ErrorsMiddleware from .middlewares.user_context import UserContextMiddleware from .router import Router @@ -23,10 +25,15 @@ class Dispatcher(Router): def __init__(self, **kwargs: Any) -> None: super(Dispatcher, self).__init__(**kwargs) - self._running_lock = Lock() - # Default middleware is needed for contextual features + self.update = TelegramEventObserver(router=self, event_name="update") + self.observers["update"] = self.update + + self.update.register(self._listen_update) self.update.outer_middleware(UserContextMiddleware()) + self.update.outer_middleware(ErrorsMiddleware(self)) + + self._running_lock = Lock() @property def parent_router(self) -> None: @@ -61,7 +68,7 @@ class Dispatcher(Router): Bot.set_current(bot) try: response = await self.update.trigger(update, bot=bot, **kwargs) - handled = response is not NOT_HANDLED + handled = response is not UNHANDLED return response finally: finish_time = loop.time() @@ -97,6 +104,74 @@ class Dispatcher(Router): yield update update_id = update.update_id + 1 + async def _listen_update(self, update: Update, **kwargs: Any) -> Any: + """ + Main updates listener + + Workflow: + - Detect content type and propagate to observers in current router + - If no one filter is pass - propagate update to child routers as Update + + :param update: + :param kwargs: + :return: + """ + event: TelegramObject + if update.message: + update_type = "message" + event = update.message + elif update.edited_message: + update_type = "edited_message" + event = update.edited_message + elif update.channel_post: + update_type = "channel_post" + event = update.channel_post + elif update.edited_channel_post: + update_type = "edited_channel_post" + event = update.edited_channel_post + elif update.inline_query: + update_type = "inline_query" + event = update.inline_query + elif update.chosen_inline_result: + update_type = "chosen_inline_result" + event = update.chosen_inline_result + elif update.callback_query: + update_type = "callback_query" + event = update.callback_query + elif update.shipping_query: + update_type = "shipping_query" + event = update.shipping_query + elif update.pre_checkout_query: + update_type = "pre_checkout_query" + event = update.pre_checkout_query + elif update.poll: + update_type = "poll" + event = update.poll + elif update.poll_answer: + update_type = "poll_answer" + event = update.poll_answer + else: + warnings.warn( + "Detected unknown update type.\n" + "Seems like Telegram Bot API was updated and you have " + "installed not latest version of aiogram framework", + RuntimeWarning, + ) + raise SkipHandler + + kwargs.update(event_update=update) + + for router in self.chain: + kwargs.update(event_router=router) + observer = router.observers[update_type] + response = await observer.trigger(event, update=update, **kwargs) + if response is not UNHANDLED: + break + else: + response = UNHANDLED + + return response + @classmethod async def _silent_call_request(cls, bot: Bot, result: TelegramMethod[Any]) -> None: """ @@ -129,7 +204,7 @@ class Dispatcher(Router): handled = False try: response = await self.feed_update(bot, update, **kwargs) - handled = handled is not NOT_HANDLED + handled = handled is not UNHANDLED if call_answer and isinstance(response, TelegramMethod): await self._silent_call_request(bot=bot, result=response) return handled diff --git a/aiogram/dispatcher/event/bases.py b/aiogram/dispatcher/event/bases.py index 3166dac5..cb5fb2cf 100644 --- a/aiogram/dispatcher/event/bases.py +++ b/aiogram/dispatcher/event/bases.py @@ -11,7 +11,7 @@ MiddlewareType = Union[ BaseMiddleware, Callable[[NextMiddlewareType, TelegramObject, Dict[str, Any]], Awaitable[Any]] ] -NOT_HANDLED = sentinel.NOT_HANDLED +UNHANDLED = sentinel.UNHANDLED class SkipHandler(Exception): diff --git a/aiogram/dispatcher/event/telegram.py b/aiogram/dispatcher/event/telegram.py index 9ea4650b..f9f1c6ee 100644 --- a/aiogram/dispatcher/event/telegram.py +++ b/aiogram/dispatcher/event/telegram.py @@ -8,7 +8,7 @@ from pydantic import ValidationError from ...types import TelegramObject from ..filters.base import BaseFilter -from .bases import NOT_HANDLED, MiddlewareType, NextMiddlewareType, SkipHandler +from .bases import UNHANDLED, MiddlewareType, NextMiddlewareType, SkipHandler from .handler import CallbackType, FilterObject, FilterType, HandlerObject, HandlerType if TYPE_CHECKING: # pragma: no cover @@ -60,6 +60,17 @@ class TelegramEventObserver: yield filter_ registry.append(filter_) + def _resolve_inner_middlewares(self) -> List[MiddlewareType]: + """ + Get all inner middlewares in an tree + """ + middlewares = [] + + for router in self.router.chain_head: + observer = router.observers[self.event_name] + middlewares.extend(observer.middlewares) + return middlewares + def resolve_filters(self, full_config: Dict[str, Any]) -> List[BaseFilter]: """ Resolve keyword filters via filters factory @@ -129,12 +140,14 @@ class TelegramEventObserver: if result: kwargs.update(data) try: - wrapped_inner = self._wrap_middleware(self.middlewares, handler.call) + wrapped_inner = self._wrap_middleware( + self._resolve_inner_middlewares(), handler.call + ) return await wrapped_inner(event, kwargs) except SkipHandler: continue - return NOT_HANDLED + return UNHANDLED def __call__( self, *args: FilterType, **bound_filters: BaseFilter diff --git a/aiogram/dispatcher/filters/__init__.py b/aiogram/dispatcher/filters/__init__.py index e59259be..1452d0a3 100644 --- a/aiogram/dispatcher/filters/__init__.py +++ b/aiogram/dispatcher/filters/__init__.py @@ -18,7 +18,6 @@ __all__ = ( ) BUILTIN_FILTERS: Dict[str, Tuple[Type[BaseFilter], ...]] = { - "update": (), "message": (Text, Command, ContentTypesFilter), "edited_message": (Text, Command, ContentTypesFilter), "channel_post": (Text, ContentTypesFilter), diff --git a/aiogram/dispatcher/middlewares/error.py b/aiogram/dispatcher/middlewares/error.py index 49606eaf..bd3cdcd4 100644 --- a/aiogram/dispatcher/middlewares/error.py +++ b/aiogram/dispatcher/middlewares/error.py @@ -3,7 +3,7 @@ from __future__ import annotations from typing import TYPE_CHECKING, Any, Awaitable, Callable, Dict from ...types import Update -from ..event.bases import NOT_HANDLED, CancelHandler, SkipHandler +from ..event.bases import UNHANDLED, CancelHandler, SkipHandler from .base import BaseMiddleware if TYPE_CHECKING: # pragma: no cover @@ -25,7 +25,9 @@ class ErrorsMiddleware(BaseMiddleware[Update]): except (SkipHandler, CancelHandler): # pragma: no cover raise except Exception as e: - response = await self.router.errors.trigger(event, exception=e, **data) - if response is NOT_HANDLED: - raise - return response + for router in self.router.chain: + observer = router.observers["error"] + response = await observer.trigger(event, exception=e, **data) + if response is not UNHANDLED: + return response + raise diff --git a/aiogram/dispatcher/router.py b/aiogram/dispatcher/router.py index 0ee4971d..eee7e638 100644 --- a/aiogram/dispatcher/router.py +++ b/aiogram/dispatcher/router.py @@ -6,11 +6,10 @@ from typing import Any, Dict, Generator, List, Optional, Union from ..types import TelegramObject, Update from ..utils.imports import import_module from ..utils.warnings import CodeHasNoEffect -from .event.bases import NOT_HANDLED, SkipHandler +from .event.bases import UNHANDLED, SkipHandler from .event.event import EventObserver from .event.telegram import TelegramEventObserver from .filters import BUILTIN_FILTERS -from .middlewares.error import ErrorsMiddleware class Router: @@ -37,7 +36,6 @@ class Router: self.sub_routers: List[Router] = [] # Observers - self.update = TelegramEventObserver(router=self, event_name="update") self.message = TelegramEventObserver(router=self, event_name="message") self.edited_message = TelegramEventObserver(router=self, event_name="edited_message") self.channel_post = TelegramEventObserver(router=self, event_name="channel_post") @@ -61,7 +59,6 @@ class Router: self.shutdown = EventObserver() self.observers: Dict[str, TelegramEventObserver] = { - "update": self.update, "message": self.message, "edited_message": self.edited_message, "channel_post": self.channel_post, @@ -76,11 +73,6 @@ class Router: "error": self.errors, } - # Root handler - self.update.register(self._listen_update) - - self.update.outer_middleware(ErrorsMiddleware(self)) - # Builtin filters if use_builtin_filters: for name, observer in self.observers.items(): @@ -138,8 +130,9 @@ class Router: if not self.use_builtin_filters and parent.use_builtin_filters: warnings.warn( - f"Router(use_builtin_filters=False) has no effect for router {self} " - f"in due to builtin filters is already registered in parent router", + f"{self.__class__.__name__}(use_builtin_filters=False) has no effect" + f" for router {self} in due to builtin filters is already registered" + f" in parent router", CodeHasNoEffect, stacklevel=3, ) @@ -167,73 +160,6 @@ class Router: router.parent_router = self return router - async def _listen_update(self, update: Update, **kwargs: Any) -> Any: - """ - Main updates listener - - Workflow: - - Detect content type and propagate to observers in current router - - If no one filter is pass - propagate update to child routers as Update - - :param update: - :param kwargs: - :return: - """ - event: TelegramObject - if update.message: - update_type = "message" - event = update.message - elif update.edited_message: - update_type = "edited_message" - event = update.edited_message - elif update.channel_post: - update_type = "channel_post" - event = update.channel_post - elif update.edited_channel_post: - update_type = "edited_channel_post" - event = update.edited_channel_post - elif update.inline_query: - update_type = "inline_query" - event = update.inline_query - elif update.chosen_inline_result: - update_type = "chosen_inline_result" - event = update.chosen_inline_result - elif update.callback_query: - update_type = "callback_query" - event = update.callback_query - elif update.shipping_query: - update_type = "shipping_query" - event = update.shipping_query - elif update.pre_checkout_query: - update_type = "pre_checkout_query" - event = update.pre_checkout_query - elif update.poll: - update_type = "poll" - event = update.poll - elif update.poll_answer: - update_type = "poll_answer" - event = update.poll_answer - else: - warnings.warn( - "Detected unknown update type.\n" - "Seems like Telegram Bot API was updated and you have " - "installed not latest version of aiogram framework", - RuntimeWarning, - ) - raise SkipHandler - - kwargs.update(event_update=update, event_router=self) - observer = self.observers[update_type] - response = await observer.trigger(event, update=update, **kwargs) - - if response is NOT_HANDLED: # Resolve nested routers - for router in self.sub_routers: - response = await router.update.trigger(event=update, **kwargs) - if response is NOT_HANDLED: - continue - - return response - async def emit_startup(self, *args: Any, **kwargs: Any) -> None: """ Recursively call startup callbacks diff --git a/aiogram/methods/send_animation.py b/aiogram/methods/send_animation.py index deb36526..28630812 100644 --- a/aiogram/methods/send_animation.py +++ b/aiogram/methods/send_animation.py @@ -1,6 +1,6 @@ from __future__ import annotations -from typing import TYPE_CHECKING, Any, Dict, Optional, Union +from typing import TYPE_CHECKING, Any, Dict, List, Optional, Union from ..types import ( UNSET, diff --git a/docs2/api/bot.rst b/docs2/api/bot.rst index 9f40aca1..15f1c0a4 100644 --- a/docs2/api/bot.rst +++ b/docs2/api/bot.rst @@ -3,13 +3,13 @@ Bot ### Bot instance can be created from :code:`aiogram.Bot` (:code:`from aiogram import Bot`) and -you can't use API methods without instance of bot with configured token. +you can't use methods without instance of bot with configured token. -This class has aliases for all API methods and named in :code:`lower_camel_case`. +This class has aliases for all methods and named in :code:`lower_camel_case`. For example :code:`sendMessage` named :code:`send_message` and has the same specification with all class-based methods. -.. autoclass:: aiogram.api.client.bot.Bot +.. autoclass:: aiogram.client.bot.Bot :members: :show-inheritance: :member-order: bysource diff --git a/docs2/api/download_file.rst b/docs2/api/download_file.rst index 028eb723..d60e8051 100644 --- a/docs2/api/download_file.rst +++ b/docs2/api/download_file.rst @@ -11,6 +11,7 @@ Information about files sent to the bot is contained in `Message `__ method to get `file_path`. @@ -30,7 +31,7 @@ Download file by `file_path` to destination. If you want to automatically create destination (:obj:`io.BytesIO`) use default value of destination and handle result of this method. -.. autoclass:: aiogram.api.client.bot.Bot +.. autoclass:: aiogram.client.bot.Bot :members: download_file :exclude-members: __init__ @@ -80,7 +81,7 @@ Download file by `file_id` or `Downloadable` object to destination. If you want to automatically create destination (:obj:`io.BytesIO`) use default value of destination and handle result of this method. -.. autoclass:: aiogram.api.client.bot.Bot +.. autoclass:: aiogram.client.bot.Bot :members: download :exclude-members: __init__ diff --git a/docs2/api/index.rst b/docs2/api/index.rst index 90ae61a2..e82565a8 100644 --- a/docs2/api/index.rst +++ b/docs2/api/index.rst @@ -4,7 +4,7 @@ Bot API **aiogram** now is fully support of `Telegram Bot API `_ -All API methods and types is fully autogenerated from Telegram Bot API docs by parser with code-generator. +All methods and types is fully autogenerated from Telegram Bot API docs by parser with code-generator. .. toctree:: bot diff --git a/docs2/api/methods/add_sticker_to_set.rst b/docs2/api/methods/add_sticker_to_set.rst index 82d4f454..94fbe6c0 100644 --- a/docs2/api/methods/add_sticker_to_set.rst +++ b/docs2/api/methods/add_sticker_to_set.rst @@ -6,7 +6,7 @@ Use this method to add a new sticker to a set created by the bot. You must use e Returns: :obj:`bool` -.. automodule:: aiogram.api.methods.add_sticker_to_set +.. automodule:: aiogram.methods.add_sticker_to_set :members: :member-order: bysource :special-members: __init__ @@ -30,8 +30,8 @@ Method as object Imports: - :code:`from aiogram.methods import AddStickerToSet` -- :code:`from aiogram.api.methods import AddStickerToSet` -- :code:`from aiogram.api.methods.add_sticker_to_set import AddStickerToSet` +- :code:`from aiogram.methods import AddStickerToSet` +- :code:`from aiogram.methods.add_sticker_to_set import AddStickerToSet` In handlers with current bot ---------------------------- diff --git a/docs2/api/methods/answer_callback_query.rst b/docs2/api/methods/answer_callback_query.rst index d0c602cd..25c35234 100644 --- a/docs2/api/methods/answer_callback_query.rst +++ b/docs2/api/methods/answer_callback_query.rst @@ -8,7 +8,7 @@ Alternatively, the user can be redirected to the specified Game URL. For this op Returns: :obj:`bool` -.. automodule:: aiogram.api.methods.answer_callback_query +.. automodule:: aiogram.methods.answer_callback_query :members: :member-order: bysource :special-members: __init__ @@ -32,8 +32,8 @@ Method as object Imports: - :code:`from aiogram.methods import AnswerCallbackQuery` -- :code:`from aiogram.api.methods import AnswerCallbackQuery` -- :code:`from aiogram.api.methods.answer_callback_query import AnswerCallbackQuery` +- :code:`from aiogram.methods import AnswerCallbackQuery` +- :code:`from aiogram.methods.answer_callback_query import AnswerCallbackQuery` In handlers with current bot ---------------------------- diff --git a/docs2/api/methods/answer_inline_query.rst b/docs2/api/methods/answer_inline_query.rst index 09040291..de92c682 100644 --- a/docs2/api/methods/answer_inline_query.rst +++ b/docs2/api/methods/answer_inline_query.rst @@ -8,7 +8,7 @@ No more than 50 results per query are allowed. Returns: :obj:`bool` -.. automodule:: aiogram.api.methods.answer_inline_query +.. automodule:: aiogram.methods.answer_inline_query :members: :member-order: bysource :special-members: __init__ @@ -32,8 +32,8 @@ Method as object Imports: - :code:`from aiogram.methods import AnswerInlineQuery` -- :code:`from aiogram.api.methods import AnswerInlineQuery` -- :code:`from aiogram.api.methods.answer_inline_query import AnswerInlineQuery` +- :code:`from aiogram.methods import AnswerInlineQuery` +- :code:`from aiogram.methods.answer_inline_query import AnswerInlineQuery` In handlers with current bot ---------------------------- diff --git a/docs2/api/methods/answer_pre_checkout_query.rst b/docs2/api/methods/answer_pre_checkout_query.rst index 9809bc67..5d92b201 100644 --- a/docs2/api/methods/answer_pre_checkout_query.rst +++ b/docs2/api/methods/answer_pre_checkout_query.rst @@ -6,7 +6,7 @@ Once the user has confirmed their payment and shipping details, the Bot API send Returns: :obj:`bool` -.. automodule:: aiogram.api.methods.answer_pre_checkout_query +.. automodule:: aiogram.methods.answer_pre_checkout_query :members: :member-order: bysource :special-members: __init__ @@ -30,8 +30,8 @@ Method as object Imports: - :code:`from aiogram.methods import AnswerPreCheckoutQuery` -- :code:`from aiogram.api.methods import AnswerPreCheckoutQuery` -- :code:`from aiogram.api.methods.answer_pre_checkout_query import AnswerPreCheckoutQuery` +- :code:`from aiogram.methods import AnswerPreCheckoutQuery` +- :code:`from aiogram.methods.answer_pre_checkout_query import AnswerPreCheckoutQuery` In handlers with current bot ---------------------------- diff --git a/docs2/api/methods/answer_shipping_query.rst b/docs2/api/methods/answer_shipping_query.rst index 35ce6199..984e2bf9 100644 --- a/docs2/api/methods/answer_shipping_query.rst +++ b/docs2/api/methods/answer_shipping_query.rst @@ -6,7 +6,7 @@ If you sent an invoice requesting a shipping address and the parameter is_flexib Returns: :obj:`bool` -.. automodule:: aiogram.api.methods.answer_shipping_query +.. automodule:: aiogram.methods.answer_shipping_query :members: :member-order: bysource :special-members: __init__ @@ -30,8 +30,8 @@ Method as object Imports: - :code:`from aiogram.methods import AnswerShippingQuery` -- :code:`from aiogram.api.methods import AnswerShippingQuery` -- :code:`from aiogram.api.methods.answer_shipping_query import AnswerShippingQuery` +- :code:`from aiogram.methods import AnswerShippingQuery` +- :code:`from aiogram.methods.answer_shipping_query import AnswerShippingQuery` In handlers with current bot ---------------------------- diff --git a/docs2/api/methods/create_new_sticker_set.rst b/docs2/api/methods/create_new_sticker_set.rst index 70d98636..6288994d 100644 --- a/docs2/api/methods/create_new_sticker_set.rst +++ b/docs2/api/methods/create_new_sticker_set.rst @@ -6,7 +6,7 @@ Use this method to create a new sticker set owned by a user. The bot will be abl Returns: :obj:`bool` -.. automodule:: aiogram.api.methods.create_new_sticker_set +.. automodule:: aiogram.methods.create_new_sticker_set :members: :member-order: bysource :special-members: __init__ @@ -30,8 +30,8 @@ Method as object Imports: - :code:`from aiogram.methods import CreateNewStickerSet` -- :code:`from aiogram.api.methods import CreateNewStickerSet` -- :code:`from aiogram.api.methods.create_new_sticker_set import CreateNewStickerSet` +- :code:`from aiogram.methods import CreateNewStickerSet` +- :code:`from aiogram.methods.create_new_sticker_set import CreateNewStickerSet` In handlers with current bot ---------------------------- diff --git a/docs2/api/methods/delete_chat_photo.rst b/docs2/api/methods/delete_chat_photo.rst index 209f4752..bb16f363 100644 --- a/docs2/api/methods/delete_chat_photo.rst +++ b/docs2/api/methods/delete_chat_photo.rst @@ -6,7 +6,7 @@ Use this method to delete a chat photo. Photos can't be changed for private chat Returns: :obj:`bool` -.. automodule:: aiogram.api.methods.delete_chat_photo +.. automodule:: aiogram.methods.delete_chat_photo :members: :member-order: bysource :special-members: __init__ @@ -30,8 +30,8 @@ Method as object Imports: - :code:`from aiogram.methods import DeleteChatPhoto` -- :code:`from aiogram.api.methods import DeleteChatPhoto` -- :code:`from aiogram.api.methods.delete_chat_photo import DeleteChatPhoto` +- :code:`from aiogram.methods import DeleteChatPhoto` +- :code:`from aiogram.methods.delete_chat_photo import DeleteChatPhoto` In handlers with current bot ---------------------------- diff --git a/docs2/api/methods/delete_chat_sticker_set.rst b/docs2/api/methods/delete_chat_sticker_set.rst index 7385050e..a21d93fc 100644 --- a/docs2/api/methods/delete_chat_sticker_set.rst +++ b/docs2/api/methods/delete_chat_sticker_set.rst @@ -6,7 +6,7 @@ Use this method to delete a group sticker set from a supergroup. The bot must be Returns: :obj:`bool` -.. automodule:: aiogram.api.methods.delete_chat_sticker_set +.. automodule:: aiogram.methods.delete_chat_sticker_set :members: :member-order: bysource :special-members: __init__ @@ -30,8 +30,8 @@ Method as object Imports: - :code:`from aiogram.methods import DeleteChatStickerSet` -- :code:`from aiogram.api.methods import DeleteChatStickerSet` -- :code:`from aiogram.api.methods.delete_chat_sticker_set import DeleteChatStickerSet` +- :code:`from aiogram.methods import DeleteChatStickerSet` +- :code:`from aiogram.methods.delete_chat_sticker_set import DeleteChatStickerSet` In handlers with current bot ---------------------------- diff --git a/docs2/api/methods/delete_message.rst b/docs2/api/methods/delete_message.rst index 41ebaee4..010cf5ca 100644 --- a/docs2/api/methods/delete_message.rst +++ b/docs2/api/methods/delete_message.rst @@ -22,7 +22,7 @@ Returns True on success. Returns: :obj:`bool` -.. automodule:: aiogram.api.methods.delete_message +.. automodule:: aiogram.methods.delete_message :members: :member-order: bysource :special-members: __init__ @@ -46,8 +46,8 @@ Method as object Imports: - :code:`from aiogram.methods import DeleteMessage` -- :code:`from aiogram.api.methods import DeleteMessage` -- :code:`from aiogram.api.methods.delete_message import DeleteMessage` +- :code:`from aiogram.methods import DeleteMessage` +- :code:`from aiogram.methods.delete_message import DeleteMessage` In handlers with current bot ---------------------------- diff --git a/docs2/api/methods/delete_sticker_from_set.rst b/docs2/api/methods/delete_sticker_from_set.rst index 80daaa16..cb616555 100644 --- a/docs2/api/methods/delete_sticker_from_set.rst +++ b/docs2/api/methods/delete_sticker_from_set.rst @@ -6,7 +6,7 @@ Use this method to delete a sticker from a set created by the bot. Returns True Returns: :obj:`bool` -.. automodule:: aiogram.api.methods.delete_sticker_from_set +.. automodule:: aiogram.methods.delete_sticker_from_set :members: :member-order: bysource :special-members: __init__ @@ -30,8 +30,8 @@ Method as object Imports: - :code:`from aiogram.methods import DeleteStickerFromSet` -- :code:`from aiogram.api.methods import DeleteStickerFromSet` -- :code:`from aiogram.api.methods.delete_sticker_from_set import DeleteStickerFromSet` +- :code:`from aiogram.methods import DeleteStickerFromSet` +- :code:`from aiogram.methods.delete_sticker_from_set import DeleteStickerFromSet` In handlers with current bot ---------------------------- diff --git a/docs2/api/methods/delete_webhook.rst b/docs2/api/methods/delete_webhook.rst index ddf0c126..29b3ac48 100644 --- a/docs2/api/methods/delete_webhook.rst +++ b/docs2/api/methods/delete_webhook.rst @@ -6,7 +6,7 @@ Use this method to remove webhook integration if you decide to switch back to ge Returns: :obj:`bool` -.. automodule:: aiogram.api.methods.delete_webhook +.. automodule:: aiogram.methods.delete_webhook :members: :member-order: bysource :special-members: __init__ @@ -30,8 +30,8 @@ Method as object Imports: - :code:`from aiogram.methods import DeleteWebhook` -- :code:`from aiogram.api.methods import DeleteWebhook` -- :code:`from aiogram.api.methods.delete_webhook import DeleteWebhook` +- :code:`from aiogram.methods import DeleteWebhook` +- :code:`from aiogram.methods.delete_webhook import DeleteWebhook` In handlers with current bot ---------------------------- diff --git a/docs2/api/methods/edit_message_caption.rst b/docs2/api/methods/edit_message_caption.rst index 0ee58b74..d672cd2f 100644 --- a/docs2/api/methods/edit_message_caption.rst +++ b/docs2/api/methods/edit_message_caption.rst @@ -6,7 +6,7 @@ Use this method to edit captions of messages. On success, if edited message is s Returns: :obj:`Union[Message, bool]` -.. automodule:: aiogram.api.methods.edit_message_caption +.. automodule:: aiogram.methods.edit_message_caption :members: :member-order: bysource :special-members: __init__ @@ -30,8 +30,8 @@ Method as object Imports: - :code:`from aiogram.methods import EditMessageCaption` -- :code:`from aiogram.api.methods import EditMessageCaption` -- :code:`from aiogram.api.methods.edit_message_caption import EditMessageCaption` +- :code:`from aiogram.methods import EditMessageCaption` +- :code:`from aiogram.methods.edit_message_caption import EditMessageCaption` In handlers with current bot ---------------------------- diff --git a/docs2/api/methods/edit_message_live_location.rst b/docs2/api/methods/edit_message_live_location.rst index 77ee05d0..72024073 100644 --- a/docs2/api/methods/edit_message_live_location.rst +++ b/docs2/api/methods/edit_message_live_location.rst @@ -6,7 +6,7 @@ Use this method to edit live location messages. A location can be edited until i Returns: :obj:`Union[Message, bool]` -.. automodule:: aiogram.api.methods.edit_message_live_location +.. automodule:: aiogram.methods.edit_message_live_location :members: :member-order: bysource :special-members: __init__ @@ -30,8 +30,8 @@ Method as object Imports: - :code:`from aiogram.methods import EditMessageLiveLocation` -- :code:`from aiogram.api.methods import EditMessageLiveLocation` -- :code:`from aiogram.api.methods.edit_message_live_location import EditMessageLiveLocation` +- :code:`from aiogram.methods import EditMessageLiveLocation` +- :code:`from aiogram.methods.edit_message_live_location import EditMessageLiveLocation` In handlers with current bot ---------------------------- diff --git a/docs2/api/methods/edit_message_media.rst b/docs2/api/methods/edit_message_media.rst index ed376534..64d83395 100644 --- a/docs2/api/methods/edit_message_media.rst +++ b/docs2/api/methods/edit_message_media.rst @@ -6,7 +6,7 @@ Use this method to edit animation, audio, document, photo, or video messages. If Returns: :obj:`Union[Message, bool]` -.. automodule:: aiogram.api.methods.edit_message_media +.. automodule:: aiogram.methods.edit_message_media :members: :member-order: bysource :special-members: __init__ @@ -30,8 +30,8 @@ Method as object Imports: - :code:`from aiogram.methods import EditMessageMedia` -- :code:`from aiogram.api.methods import EditMessageMedia` -- :code:`from aiogram.api.methods.edit_message_media import EditMessageMedia` +- :code:`from aiogram.methods import EditMessageMedia` +- :code:`from aiogram.methods.edit_message_media import EditMessageMedia` In handlers with current bot ---------------------------- diff --git a/docs2/api/methods/edit_message_reply_markup.rst b/docs2/api/methods/edit_message_reply_markup.rst index fcee14f0..1a260ce2 100644 --- a/docs2/api/methods/edit_message_reply_markup.rst +++ b/docs2/api/methods/edit_message_reply_markup.rst @@ -6,7 +6,7 @@ Use this method to edit only the reply markup of messages. On success, if edited Returns: :obj:`Union[Message, bool]` -.. automodule:: aiogram.api.methods.edit_message_reply_markup +.. automodule:: aiogram.methods.edit_message_reply_markup :members: :member-order: bysource :special-members: __init__ @@ -30,8 +30,8 @@ Method as object Imports: - :code:`from aiogram.methods import EditMessageReplyMarkup` -- :code:`from aiogram.api.methods import EditMessageReplyMarkup` -- :code:`from aiogram.api.methods.edit_message_reply_markup import EditMessageReplyMarkup` +- :code:`from aiogram.methods import EditMessageReplyMarkup` +- :code:`from aiogram.methods.edit_message_reply_markup import EditMessageReplyMarkup` In handlers with current bot ---------------------------- diff --git a/docs2/api/methods/edit_message_text.rst b/docs2/api/methods/edit_message_text.rst index af456971..880c74da 100644 --- a/docs2/api/methods/edit_message_text.rst +++ b/docs2/api/methods/edit_message_text.rst @@ -6,7 +6,7 @@ Use this method to edit text and game messages. On success, if edited message is Returns: :obj:`Union[Message, bool]` -.. automodule:: aiogram.api.methods.edit_message_text +.. automodule:: aiogram.methods.edit_message_text :members: :member-order: bysource :special-members: __init__ @@ -30,8 +30,8 @@ Method as object Imports: - :code:`from aiogram.methods import EditMessageText` -- :code:`from aiogram.api.methods import EditMessageText` -- :code:`from aiogram.api.methods.edit_message_text import EditMessageText` +- :code:`from aiogram.methods import EditMessageText` +- :code:`from aiogram.methods.edit_message_text import EditMessageText` In handlers with current bot ---------------------------- diff --git a/docs2/api/methods/export_chat_invite_link.rst b/docs2/api/methods/export_chat_invite_link.rst index a5ed0f04..b169709a 100644 --- a/docs2/api/methods/export_chat_invite_link.rst +++ b/docs2/api/methods/export_chat_invite_link.rst @@ -8,7 +8,7 @@ Note: Each administrator in a chat generates their own invite links. Bots can't Returns: :obj:`str` -.. automodule:: aiogram.api.methods.export_chat_invite_link +.. automodule:: aiogram.methods.export_chat_invite_link :members: :member-order: bysource :special-members: __init__ @@ -32,8 +32,8 @@ Method as object Imports: - :code:`from aiogram.methods import ExportChatInviteLink` -- :code:`from aiogram.api.methods import ExportChatInviteLink` -- :code:`from aiogram.api.methods.export_chat_invite_link import ExportChatInviteLink` +- :code:`from aiogram.methods import ExportChatInviteLink` +- :code:`from aiogram.methods.export_chat_invite_link import ExportChatInviteLink` In handlers with current bot ---------------------------- diff --git a/docs2/api/methods/forward_message.rst b/docs2/api/methods/forward_message.rst index 443c4b5d..9d89ffee 100644 --- a/docs2/api/methods/forward_message.rst +++ b/docs2/api/methods/forward_message.rst @@ -6,7 +6,7 @@ Use this method to forward messages of any kind. On success, the sent Message is Returns: :obj:`Message` -.. automodule:: aiogram.api.methods.forward_message +.. automodule:: aiogram.methods.forward_message :members: :member-order: bysource :special-members: __init__ @@ -30,8 +30,8 @@ Method as object Imports: - :code:`from aiogram.methods import ForwardMessage` -- :code:`from aiogram.api.methods import ForwardMessage` -- :code:`from aiogram.api.methods.forward_message import ForwardMessage` +- :code:`from aiogram.methods import ForwardMessage` +- :code:`from aiogram.methods.forward_message import ForwardMessage` In handlers with current bot ---------------------------- diff --git a/docs2/api/methods/get_chat.rst b/docs2/api/methods/get_chat.rst index e9a3101c..139d0fde 100644 --- a/docs2/api/methods/get_chat.rst +++ b/docs2/api/methods/get_chat.rst @@ -6,7 +6,7 @@ Use this method to get up to date information about the chat (current name of th Returns: :obj:`Chat` -.. automodule:: aiogram.api.methods.get_chat +.. automodule:: aiogram.methods.get_chat :members: :member-order: bysource :special-members: __init__ @@ -30,8 +30,8 @@ Method as object Imports: - :code:`from aiogram.methods import GetChat` -- :code:`from aiogram.api.methods import GetChat` -- :code:`from aiogram.api.methods.get_chat import GetChat` +- :code:`from aiogram.methods import GetChat` +- :code:`from aiogram.methods.get_chat import GetChat` In handlers with current bot ---------------------------- diff --git a/docs2/api/methods/get_chat_administrators.rst b/docs2/api/methods/get_chat_administrators.rst index 5c10491f..2a328737 100644 --- a/docs2/api/methods/get_chat_administrators.rst +++ b/docs2/api/methods/get_chat_administrators.rst @@ -6,7 +6,7 @@ Use this method to get a list of administrators in a chat. On success, returns a Returns: :obj:`List[ChatMember]` -.. automodule:: aiogram.api.methods.get_chat_administrators +.. automodule:: aiogram.methods.get_chat_administrators :members: :member-order: bysource :special-members: __init__ @@ -30,8 +30,8 @@ Method as object Imports: - :code:`from aiogram.methods import GetChatAdministrators` -- :code:`from aiogram.api.methods import GetChatAdministrators` -- :code:`from aiogram.api.methods.get_chat_administrators import GetChatAdministrators` +- :code:`from aiogram.methods import GetChatAdministrators` +- :code:`from aiogram.methods.get_chat_administrators import GetChatAdministrators` In handlers with current bot ---------------------------- diff --git a/docs2/api/methods/get_chat_member.rst b/docs2/api/methods/get_chat_member.rst index 07d53460..82562019 100644 --- a/docs2/api/methods/get_chat_member.rst +++ b/docs2/api/methods/get_chat_member.rst @@ -6,7 +6,7 @@ Use this method to get information about a member of a chat. Returns a ChatMembe Returns: :obj:`ChatMember` -.. automodule:: aiogram.api.methods.get_chat_member +.. automodule:: aiogram.methods.get_chat_member :members: :member-order: bysource :special-members: __init__ @@ -30,8 +30,8 @@ Method as object Imports: - :code:`from aiogram.methods import GetChatMember` -- :code:`from aiogram.api.methods import GetChatMember` -- :code:`from aiogram.api.methods.get_chat_member import GetChatMember` +- :code:`from aiogram.methods import GetChatMember` +- :code:`from aiogram.methods.get_chat_member import GetChatMember` In handlers with current bot ---------------------------- diff --git a/docs2/api/methods/get_chat_members_count.rst b/docs2/api/methods/get_chat_members_count.rst index 4cd69f66..c618afa5 100644 --- a/docs2/api/methods/get_chat_members_count.rst +++ b/docs2/api/methods/get_chat_members_count.rst @@ -6,7 +6,7 @@ Use this method to get the number of members in a chat. Returns Int on success. Returns: :obj:`int` -.. automodule:: aiogram.api.methods.get_chat_members_count +.. automodule:: aiogram.methods.get_chat_members_count :members: :member-order: bysource :special-members: __init__ @@ -30,8 +30,8 @@ Method as object Imports: - :code:`from aiogram.methods import GetChatMembersCount` -- :code:`from aiogram.api.methods import GetChatMembersCount` -- :code:`from aiogram.api.methods.get_chat_members_count import GetChatMembersCount` +- :code:`from aiogram.methods import GetChatMembersCount` +- :code:`from aiogram.methods.get_chat_members_count import GetChatMembersCount` In handlers with current bot ---------------------------- diff --git a/docs2/api/methods/get_file.rst b/docs2/api/methods/get_file.rst index cc40a00b..5ebecd3a 100644 --- a/docs2/api/methods/get_file.rst +++ b/docs2/api/methods/get_file.rst @@ -8,7 +8,7 @@ Note: This function may not preserve the original file name and MIME type. You s Returns: :obj:`File` -.. automodule:: aiogram.api.methods.get_file +.. automodule:: aiogram.methods.get_file :members: :member-order: bysource :special-members: __init__ @@ -32,8 +32,8 @@ Method as object Imports: - :code:`from aiogram.methods import GetFile` -- :code:`from aiogram.api.methods import GetFile` -- :code:`from aiogram.api.methods.get_file import GetFile` +- :code:`from aiogram.methods import GetFile` +- :code:`from aiogram.methods.get_file import GetFile` In handlers with current bot ---------------------------- diff --git a/docs2/api/methods/get_game_high_scores.rst b/docs2/api/methods/get_game_high_scores.rst index e4171f55..9801380a 100644 --- a/docs2/api/methods/get_game_high_scores.rst +++ b/docs2/api/methods/get_game_high_scores.rst @@ -8,7 +8,7 @@ This method will currently return scores for the target user, plus two of their Returns: :obj:`List[GameHighScore]` -.. automodule:: aiogram.api.methods.get_game_high_scores +.. automodule:: aiogram.methods.get_game_high_scores :members: :member-order: bysource :special-members: __init__ @@ -32,8 +32,8 @@ Method as object Imports: - :code:`from aiogram.methods import GetGameHighScores` -- :code:`from aiogram.api.methods import GetGameHighScores` -- :code:`from aiogram.api.methods.get_game_high_scores import GetGameHighScores` +- :code:`from aiogram.methods import GetGameHighScores` +- :code:`from aiogram.methods.get_game_high_scores import GetGameHighScores` In handlers with current bot ---------------------------- diff --git a/docs2/api/methods/get_me.rst b/docs2/api/methods/get_me.rst index 6d0fda74..ec819ed8 100644 --- a/docs2/api/methods/get_me.rst +++ b/docs2/api/methods/get_me.rst @@ -6,7 +6,7 @@ A simple method for testing your bot's auth token. Requires no parameters. Retur Returns: :obj:`User` -.. automodule:: aiogram.api.methods.get_me +.. automodule:: aiogram.methods.get_me :members: :member-order: bysource :special-members: __init__ @@ -30,8 +30,8 @@ Method as object Imports: - :code:`from aiogram.methods import GetMe` -- :code:`from aiogram.api.methods import GetMe` -- :code:`from aiogram.api.methods.get_me import GetMe` +- :code:`from aiogram.methods import GetMe` +- :code:`from aiogram.methods.get_me import GetMe` In handlers with current bot ---------------------------- diff --git a/docs2/api/methods/get_my_commands.rst b/docs2/api/methods/get_my_commands.rst index 103539e8..2f318e02 100644 --- a/docs2/api/methods/get_my_commands.rst +++ b/docs2/api/methods/get_my_commands.rst @@ -6,7 +6,7 @@ Use this method to get the current list of the bot's commands. Requires no param Returns: :obj:`List[BotCommand]` -.. automodule:: aiogram.api.methods.get_my_commands +.. automodule:: aiogram.methods.get_my_commands :members: :member-order: bysource :special-members: __init__ @@ -30,8 +30,8 @@ Method as object Imports: - :code:`from aiogram.methods import GetMyCommands` -- :code:`from aiogram.api.methods import GetMyCommands` -- :code:`from aiogram.api.methods.get_my_commands import GetMyCommands` +- :code:`from aiogram.methods import GetMyCommands` +- :code:`from aiogram.methods.get_my_commands import GetMyCommands` In handlers with current bot ---------------------------- diff --git a/docs2/api/methods/get_sticker_set.rst b/docs2/api/methods/get_sticker_set.rst index d7694f61..15d8f375 100644 --- a/docs2/api/methods/get_sticker_set.rst +++ b/docs2/api/methods/get_sticker_set.rst @@ -6,7 +6,7 @@ Use this method to get a sticker set. On success, a StickerSet object is returne Returns: :obj:`StickerSet` -.. automodule:: aiogram.api.methods.get_sticker_set +.. automodule:: aiogram.methods.get_sticker_set :members: :member-order: bysource :special-members: __init__ @@ -30,8 +30,8 @@ Method as object Imports: - :code:`from aiogram.methods import GetStickerSet` -- :code:`from aiogram.api.methods import GetStickerSet` -- :code:`from aiogram.api.methods.get_sticker_set import GetStickerSet` +- :code:`from aiogram.methods import GetStickerSet` +- :code:`from aiogram.methods.get_sticker_set import GetStickerSet` In handlers with current bot ---------------------------- diff --git a/docs2/api/methods/get_updates.rst b/docs2/api/methods/get_updates.rst index 068cd31a..d290df3c 100644 --- a/docs2/api/methods/get_updates.rst +++ b/docs2/api/methods/get_updates.rst @@ -12,7 +12,7 @@ Notes Returns: :obj:`List[Update]` -.. automodule:: aiogram.api.methods.get_updates +.. automodule:: aiogram.methods.get_updates :members: :member-order: bysource :special-members: __init__ @@ -36,8 +36,8 @@ Method as object Imports: - :code:`from aiogram.methods import GetUpdates` -- :code:`from aiogram.api.methods import GetUpdates` -- :code:`from aiogram.api.methods.get_updates import GetUpdates` +- :code:`from aiogram.methods import GetUpdates` +- :code:`from aiogram.methods.get_updates import GetUpdates` In handlers with current bot ---------------------------- diff --git a/docs2/api/methods/get_user_profile_photos.rst b/docs2/api/methods/get_user_profile_photos.rst index ac68e32c..c058d3a6 100644 --- a/docs2/api/methods/get_user_profile_photos.rst +++ b/docs2/api/methods/get_user_profile_photos.rst @@ -6,7 +6,7 @@ Use this method to get a list of profile pictures for a user. Returns a UserProf Returns: :obj:`UserProfilePhotos` -.. automodule:: aiogram.api.methods.get_user_profile_photos +.. automodule:: aiogram.methods.get_user_profile_photos :members: :member-order: bysource :special-members: __init__ @@ -30,8 +30,8 @@ Method as object Imports: - :code:`from aiogram.methods import GetUserProfilePhotos` -- :code:`from aiogram.api.methods import GetUserProfilePhotos` -- :code:`from aiogram.api.methods.get_user_profile_photos import GetUserProfilePhotos` +- :code:`from aiogram.methods import GetUserProfilePhotos` +- :code:`from aiogram.methods.get_user_profile_photos import GetUserProfilePhotos` In handlers with current bot ---------------------------- diff --git a/docs2/api/methods/get_webhook_info.rst b/docs2/api/methods/get_webhook_info.rst index 94381347..02e3bb5c 100644 --- a/docs2/api/methods/get_webhook_info.rst +++ b/docs2/api/methods/get_webhook_info.rst @@ -6,7 +6,7 @@ Use this method to get current webhook status. Requires no parameters. On succes Returns: :obj:`WebhookInfo` -.. automodule:: aiogram.api.methods.get_webhook_info +.. automodule:: aiogram.methods.get_webhook_info :members: :member-order: bysource :special-members: __init__ @@ -30,8 +30,8 @@ Method as object Imports: - :code:`from aiogram.methods import GetWebhookInfo` -- :code:`from aiogram.api.methods import GetWebhookInfo` -- :code:`from aiogram.api.methods.get_webhook_info import GetWebhookInfo` +- :code:`from aiogram.methods import GetWebhookInfo` +- :code:`from aiogram.methods.get_webhook_info import GetWebhookInfo` In handlers with current bot ---------------------------- diff --git a/docs2/api/methods/index.rst b/docs2/api/methods/index.rst index 5d4f0f70..8d83e343 100644 --- a/docs2/api/methods/index.rst +++ b/docs2/api/methods/index.rst @@ -2,8 +2,8 @@ Methods ####### -All API methods is wrapped as `pydantic `_ models -and placed in :mod:`aiogram.api.methods` package so that's mean all values which you pass +All methods is wrapped as `pydantic `_ models +and placed in :mod:`aiogram.methods` package so that's mean all values which you pass as arguments to the methods will be validated. Here is all methods is classes and in due to Python standards all classes named in diff --git a/docs2/api/methods/kick_chat_member.rst b/docs2/api/methods/kick_chat_member.rst index 14bceb76..51c5cbdf 100644 --- a/docs2/api/methods/kick_chat_member.rst +++ b/docs2/api/methods/kick_chat_member.rst @@ -6,7 +6,7 @@ Use this method to kick a user from a group, a supergroup or a channel. In the c Returns: :obj:`bool` -.. automodule:: aiogram.api.methods.kick_chat_member +.. automodule:: aiogram.methods.kick_chat_member :members: :member-order: bysource :special-members: __init__ @@ -30,8 +30,8 @@ Method as object Imports: - :code:`from aiogram.methods import KickChatMember` -- :code:`from aiogram.api.methods import KickChatMember` -- :code:`from aiogram.api.methods.kick_chat_member import KickChatMember` +- :code:`from aiogram.methods import KickChatMember` +- :code:`from aiogram.methods.kick_chat_member import KickChatMember` In handlers with current bot ---------------------------- diff --git a/docs2/api/methods/leave_chat.rst b/docs2/api/methods/leave_chat.rst index c8497475..aa5ecc49 100644 --- a/docs2/api/methods/leave_chat.rst +++ b/docs2/api/methods/leave_chat.rst @@ -6,7 +6,7 @@ Use this method for your bot to leave a group, supergroup or channel. Returns Tr Returns: :obj:`bool` -.. automodule:: aiogram.api.methods.leave_chat +.. automodule:: aiogram.methods.leave_chat :members: :member-order: bysource :special-members: __init__ @@ -30,8 +30,8 @@ Method as object Imports: - :code:`from aiogram.methods import LeaveChat` -- :code:`from aiogram.api.methods import LeaveChat` -- :code:`from aiogram.api.methods.leave_chat import LeaveChat` +- :code:`from aiogram.methods import LeaveChat` +- :code:`from aiogram.methods.leave_chat import LeaveChat` In handlers with current bot ---------------------------- diff --git a/docs2/api/methods/pin_chat_message.rst b/docs2/api/methods/pin_chat_message.rst index 60728235..adf681cb 100644 --- a/docs2/api/methods/pin_chat_message.rst +++ b/docs2/api/methods/pin_chat_message.rst @@ -6,7 +6,7 @@ Use this method to pin a message in a group, a supergroup, or a channel. The bot Returns: :obj:`bool` -.. automodule:: aiogram.api.methods.pin_chat_message +.. automodule:: aiogram.methods.pin_chat_message :members: :member-order: bysource :special-members: __init__ @@ -30,8 +30,8 @@ Method as object Imports: - :code:`from aiogram.methods import PinChatMessage` -- :code:`from aiogram.api.methods import PinChatMessage` -- :code:`from aiogram.api.methods.pin_chat_message import PinChatMessage` +- :code:`from aiogram.methods import PinChatMessage` +- :code:`from aiogram.methods.pin_chat_message import PinChatMessage` In handlers with current bot ---------------------------- diff --git a/docs2/api/methods/promote_chat_member.rst b/docs2/api/methods/promote_chat_member.rst index 4cbbb89d..cfe5d80f 100644 --- a/docs2/api/methods/promote_chat_member.rst +++ b/docs2/api/methods/promote_chat_member.rst @@ -6,7 +6,7 @@ Use this method to promote or demote a user in a supergroup or a channel. The bo Returns: :obj:`bool` -.. automodule:: aiogram.api.methods.promote_chat_member +.. automodule:: aiogram.methods.promote_chat_member :members: :member-order: bysource :special-members: __init__ @@ -30,8 +30,8 @@ Method as object Imports: - :code:`from aiogram.methods import PromoteChatMember` -- :code:`from aiogram.api.methods import PromoteChatMember` -- :code:`from aiogram.api.methods.promote_chat_member import PromoteChatMember` +- :code:`from aiogram.methods import PromoteChatMember` +- :code:`from aiogram.methods.promote_chat_member import PromoteChatMember` In handlers with current bot ---------------------------- diff --git a/docs2/api/methods/restrict_chat_member.rst b/docs2/api/methods/restrict_chat_member.rst index 7b7fe121..3f46dd42 100644 --- a/docs2/api/methods/restrict_chat_member.rst +++ b/docs2/api/methods/restrict_chat_member.rst @@ -6,7 +6,7 @@ Use this method to restrict a user in a supergroup. The bot must be an administr Returns: :obj:`bool` -.. automodule:: aiogram.api.methods.restrict_chat_member +.. automodule:: aiogram.methods.restrict_chat_member :members: :member-order: bysource :special-members: __init__ @@ -30,8 +30,8 @@ Method as object Imports: - :code:`from aiogram.methods import RestrictChatMember` -- :code:`from aiogram.api.methods import RestrictChatMember` -- :code:`from aiogram.api.methods.restrict_chat_member import RestrictChatMember` +- :code:`from aiogram.methods import RestrictChatMember` +- :code:`from aiogram.methods.restrict_chat_member import RestrictChatMember` In handlers with current bot ---------------------------- diff --git a/docs2/api/methods/send_animation.rst b/docs2/api/methods/send_animation.rst index a26c41fa..2e36eb4b 100644 --- a/docs2/api/methods/send_animation.rst +++ b/docs2/api/methods/send_animation.rst @@ -6,7 +6,7 @@ Use this method to send animation files (GIF or H.264/MPEG-4 AVC video without s Returns: :obj:`Message` -.. automodule:: aiogram.api.methods.send_animation +.. automodule:: aiogram.methods.send_animation :members: :member-order: bysource :special-members: __init__ @@ -30,8 +30,8 @@ Method as object Imports: - :code:`from aiogram.methods import SendAnimation` -- :code:`from aiogram.api.methods import SendAnimation` -- :code:`from aiogram.api.methods.send_animation import SendAnimation` +- :code:`from aiogram.methods import SendAnimation` +- :code:`from aiogram.methods.send_animation import SendAnimation` In handlers with current bot ---------------------------- diff --git a/docs2/api/methods/send_audio.rst b/docs2/api/methods/send_audio.rst index 7c797c4f..653c0f80 100644 --- a/docs2/api/methods/send_audio.rst +++ b/docs2/api/methods/send_audio.rst @@ -8,7 +8,7 @@ For sending voice messages, use the sendVoice method instead. Returns: :obj:`Message` -.. automodule:: aiogram.api.methods.send_audio +.. automodule:: aiogram.methods.send_audio :members: :member-order: bysource :special-members: __init__ @@ -32,8 +32,8 @@ Method as object Imports: - :code:`from aiogram.methods import SendAudio` -- :code:`from aiogram.api.methods import SendAudio` -- :code:`from aiogram.api.methods.send_audio import SendAudio` +- :code:`from aiogram.methods import SendAudio` +- :code:`from aiogram.methods.send_audio import SendAudio` In handlers with current bot ---------------------------- diff --git a/docs2/api/methods/send_chat_action.rst b/docs2/api/methods/send_chat_action.rst index a2ad32c7..a5b14659 100644 --- a/docs2/api/methods/send_chat_action.rst +++ b/docs2/api/methods/send_chat_action.rst @@ -10,7 +10,7 @@ We only recommend using this method when a response from the bot will take a not Returns: :obj:`bool` -.. automodule:: aiogram.api.methods.send_chat_action +.. automodule:: aiogram.methods.send_chat_action :members: :member-order: bysource :special-members: __init__ @@ -34,8 +34,8 @@ Method as object Imports: - :code:`from aiogram.methods import SendChatAction` -- :code:`from aiogram.api.methods import SendChatAction` -- :code:`from aiogram.api.methods.send_chat_action import SendChatAction` +- :code:`from aiogram.methods import SendChatAction` +- :code:`from aiogram.methods.send_chat_action import SendChatAction` In handlers with current bot ---------------------------- diff --git a/docs2/api/methods/send_contact.rst b/docs2/api/methods/send_contact.rst index df912679..1434c851 100644 --- a/docs2/api/methods/send_contact.rst +++ b/docs2/api/methods/send_contact.rst @@ -6,7 +6,7 @@ Use this method to send phone contacts. On success, the sent Message is returned Returns: :obj:`Message` -.. automodule:: aiogram.api.methods.send_contact +.. automodule:: aiogram.methods.send_contact :members: :member-order: bysource :special-members: __init__ @@ -30,8 +30,8 @@ Method as object Imports: - :code:`from aiogram.methods import SendContact` -- :code:`from aiogram.api.methods import SendContact` -- :code:`from aiogram.api.methods.send_contact import SendContact` +- :code:`from aiogram.methods import SendContact` +- :code:`from aiogram.methods.send_contact import SendContact` In handlers with current bot ---------------------------- diff --git a/docs2/api/methods/send_dice.rst b/docs2/api/methods/send_dice.rst index f58b410e..5d4e921a 100644 --- a/docs2/api/methods/send_dice.rst +++ b/docs2/api/methods/send_dice.rst @@ -6,7 +6,7 @@ Use this method to send an animated emoji that will display a random value. On s Returns: :obj:`Message` -.. automodule:: aiogram.api.methods.send_dice +.. automodule:: aiogram.methods.send_dice :members: :member-order: bysource :special-members: __init__ @@ -30,8 +30,8 @@ Method as object Imports: - :code:`from aiogram.methods import SendDice` -- :code:`from aiogram.api.methods import SendDice` -- :code:`from aiogram.api.methods.send_dice import SendDice` +- :code:`from aiogram.methods import SendDice` +- :code:`from aiogram.methods.send_dice import SendDice` In handlers with current bot ---------------------------- diff --git a/docs2/api/methods/send_document.rst b/docs2/api/methods/send_document.rst index afa2de3e..9fa70b0d 100644 --- a/docs2/api/methods/send_document.rst +++ b/docs2/api/methods/send_document.rst @@ -6,7 +6,7 @@ Use this method to send general files. On success, the sent Message is returned. Returns: :obj:`Message` -.. automodule:: aiogram.api.methods.send_document +.. automodule:: aiogram.methods.send_document :members: :member-order: bysource :special-members: __init__ @@ -30,8 +30,8 @@ Method as object Imports: - :code:`from aiogram.methods import SendDocument` -- :code:`from aiogram.api.methods import SendDocument` -- :code:`from aiogram.api.methods.send_document import SendDocument` +- :code:`from aiogram.methods import SendDocument` +- :code:`from aiogram.methods.send_document import SendDocument` In handlers with current bot ---------------------------- diff --git a/docs2/api/methods/send_game.rst b/docs2/api/methods/send_game.rst index efad6f68..be03fe66 100644 --- a/docs2/api/methods/send_game.rst +++ b/docs2/api/methods/send_game.rst @@ -6,7 +6,7 @@ Use this method to send a game. On success, the sent Message is returned. Returns: :obj:`Message` -.. automodule:: aiogram.api.methods.send_game +.. automodule:: aiogram.methods.send_game :members: :member-order: bysource :special-members: __init__ @@ -30,8 +30,8 @@ Method as object Imports: - :code:`from aiogram.methods import SendGame` -- :code:`from aiogram.api.methods import SendGame` -- :code:`from aiogram.api.methods.send_game import SendGame` +- :code:`from aiogram.methods import SendGame` +- :code:`from aiogram.methods.send_game import SendGame` In handlers with current bot ---------------------------- diff --git a/docs2/api/methods/send_invoice.rst b/docs2/api/methods/send_invoice.rst index 5409b2ec..ab77d76f 100644 --- a/docs2/api/methods/send_invoice.rst +++ b/docs2/api/methods/send_invoice.rst @@ -6,7 +6,7 @@ Use this method to send invoices. On success, the sent Message is returned. Returns: :obj:`Message` -.. automodule:: aiogram.api.methods.send_invoice +.. automodule:: aiogram.methods.send_invoice :members: :member-order: bysource :special-members: __init__ @@ -30,8 +30,8 @@ Method as object Imports: - :code:`from aiogram.methods import SendInvoice` -- :code:`from aiogram.api.methods import SendInvoice` -- :code:`from aiogram.api.methods.send_invoice import SendInvoice` +- :code:`from aiogram.methods import SendInvoice` +- :code:`from aiogram.methods.send_invoice import SendInvoice` In handlers with current bot ---------------------------- diff --git a/docs2/api/methods/send_location.rst b/docs2/api/methods/send_location.rst index 5410e967..3d67b2d7 100644 --- a/docs2/api/methods/send_location.rst +++ b/docs2/api/methods/send_location.rst @@ -6,7 +6,7 @@ Use this method to send point on the map. On success, the sent Message is return Returns: :obj:`Message` -.. automodule:: aiogram.api.methods.send_location +.. automodule:: aiogram.methods.send_location :members: :member-order: bysource :special-members: __init__ @@ -30,8 +30,8 @@ Method as object Imports: - :code:`from aiogram.methods import SendLocation` -- :code:`from aiogram.api.methods import SendLocation` -- :code:`from aiogram.api.methods.send_location import SendLocation` +- :code:`from aiogram.methods import SendLocation` +- :code:`from aiogram.methods.send_location import SendLocation` In handlers with current bot ---------------------------- diff --git a/docs2/api/methods/send_media_group.rst b/docs2/api/methods/send_media_group.rst index 85c748cd..e2bc61b0 100644 --- a/docs2/api/methods/send_media_group.rst +++ b/docs2/api/methods/send_media_group.rst @@ -6,7 +6,7 @@ Use this method to send a group of photos or videos as an album. On success, an Returns: :obj:`List[Message]` -.. automodule:: aiogram.api.methods.send_media_group +.. automodule:: aiogram.methods.send_media_group :members: :member-order: bysource :special-members: __init__ @@ -30,8 +30,8 @@ Method as object Imports: - :code:`from aiogram.methods import SendMediaGroup` -- :code:`from aiogram.api.methods import SendMediaGroup` -- :code:`from aiogram.api.methods.send_media_group import SendMediaGroup` +- :code:`from aiogram.methods import SendMediaGroup` +- :code:`from aiogram.methods.send_media_group import SendMediaGroup` In handlers with current bot ---------------------------- diff --git a/docs2/api/methods/send_message.rst b/docs2/api/methods/send_message.rst index d17d9aaf..cfc91704 100644 --- a/docs2/api/methods/send_message.rst +++ b/docs2/api/methods/send_message.rst @@ -6,7 +6,7 @@ Use this method to send text messages. On success, the sent Message is returned. Returns: :obj:`Message` -.. automodule:: aiogram.api.methods.send_message +.. automodule:: aiogram.methods.send_message :members: :member-order: bysource :special-members: __init__ @@ -30,8 +30,8 @@ Method as object Imports: - :code:`from aiogram.methods import SendMessage` -- :code:`from aiogram.api.methods import SendMessage` -- :code:`from aiogram.api.methods.send_message import SendMessage` +- :code:`from aiogram.methods import SendMessage` +- :code:`from aiogram.methods.send_message import SendMessage` In handlers with current bot ---------------------------- diff --git a/docs2/api/methods/send_photo.rst b/docs2/api/methods/send_photo.rst index 450bf9d8..f60d0764 100644 --- a/docs2/api/methods/send_photo.rst +++ b/docs2/api/methods/send_photo.rst @@ -6,7 +6,7 @@ Use this method to send photos. On success, the sent Message is returned. Returns: :obj:`Message` -.. automodule:: aiogram.api.methods.send_photo +.. automodule:: aiogram.methods.send_photo :members: :member-order: bysource :special-members: __init__ @@ -30,8 +30,8 @@ Method as object Imports: - :code:`from aiogram.methods import SendPhoto` -- :code:`from aiogram.api.methods import SendPhoto` -- :code:`from aiogram.api.methods.send_photo import SendPhoto` +- :code:`from aiogram.methods import SendPhoto` +- :code:`from aiogram.methods.send_photo import SendPhoto` In handlers with current bot ---------------------------- diff --git a/docs2/api/methods/send_poll.rst b/docs2/api/methods/send_poll.rst index 9bc1f331..6d1c96d2 100644 --- a/docs2/api/methods/send_poll.rst +++ b/docs2/api/methods/send_poll.rst @@ -6,7 +6,7 @@ Use this method to send a native poll. On success, the sent Message is returned. Returns: :obj:`Message` -.. automodule:: aiogram.api.methods.send_poll +.. automodule:: aiogram.methods.send_poll :members: :member-order: bysource :special-members: __init__ @@ -30,8 +30,8 @@ Method as object Imports: - :code:`from aiogram.methods import SendPoll` -- :code:`from aiogram.api.methods import SendPoll` -- :code:`from aiogram.api.methods.send_poll import SendPoll` +- :code:`from aiogram.methods import SendPoll` +- :code:`from aiogram.methods.send_poll import SendPoll` In handlers with current bot ---------------------------- diff --git a/docs2/api/methods/send_sticker.rst b/docs2/api/methods/send_sticker.rst index a52802ae..a1c6be86 100644 --- a/docs2/api/methods/send_sticker.rst +++ b/docs2/api/methods/send_sticker.rst @@ -6,7 +6,7 @@ Use this method to send static .WEBP or animated .TGS stickers. On success, the Returns: :obj:`Message` -.. automodule:: aiogram.api.methods.send_sticker +.. automodule:: aiogram.methods.send_sticker :members: :member-order: bysource :special-members: __init__ @@ -30,8 +30,8 @@ Method as object Imports: - :code:`from aiogram.methods import SendSticker` -- :code:`from aiogram.api.methods import SendSticker` -- :code:`from aiogram.api.methods.send_sticker import SendSticker` +- :code:`from aiogram.methods import SendSticker` +- :code:`from aiogram.methods.send_sticker import SendSticker` In handlers with current bot ---------------------------- diff --git a/docs2/api/methods/send_venue.rst b/docs2/api/methods/send_venue.rst index 2ae6fe74..18102d28 100644 --- a/docs2/api/methods/send_venue.rst +++ b/docs2/api/methods/send_venue.rst @@ -6,7 +6,7 @@ Use this method to send information about a venue. On success, the sent Message Returns: :obj:`Message` -.. automodule:: aiogram.api.methods.send_venue +.. automodule:: aiogram.methods.send_venue :members: :member-order: bysource :special-members: __init__ @@ -30,8 +30,8 @@ Method as object Imports: - :code:`from aiogram.methods import SendVenue` -- :code:`from aiogram.api.methods import SendVenue` -- :code:`from aiogram.api.methods.send_venue import SendVenue` +- :code:`from aiogram.methods import SendVenue` +- :code:`from aiogram.methods.send_venue import SendVenue` In handlers with current bot ---------------------------- diff --git a/docs2/api/methods/send_video.rst b/docs2/api/methods/send_video.rst index a896b554..c8225e76 100644 --- a/docs2/api/methods/send_video.rst +++ b/docs2/api/methods/send_video.rst @@ -6,7 +6,7 @@ Use this method to send video files, Telegram clients support mp4 videos (other Returns: :obj:`Message` -.. automodule:: aiogram.api.methods.send_video +.. automodule:: aiogram.methods.send_video :members: :member-order: bysource :special-members: __init__ @@ -30,8 +30,8 @@ Method as object Imports: - :code:`from aiogram.methods import SendVideo` -- :code:`from aiogram.api.methods import SendVideo` -- :code:`from aiogram.api.methods.send_video import SendVideo` +- :code:`from aiogram.methods import SendVideo` +- :code:`from aiogram.methods.send_video import SendVideo` In handlers with current bot ---------------------------- diff --git a/docs2/api/methods/send_video_note.rst b/docs2/api/methods/send_video_note.rst index e210564f..c70b7e38 100644 --- a/docs2/api/methods/send_video_note.rst +++ b/docs2/api/methods/send_video_note.rst @@ -6,7 +6,7 @@ As of v.4.0, Telegram clients support rounded square mp4 videos of up to 1 minut Returns: :obj:`Message` -.. automodule:: aiogram.api.methods.send_video_note +.. automodule:: aiogram.methods.send_video_note :members: :member-order: bysource :special-members: __init__ @@ -30,8 +30,8 @@ Method as object Imports: - :code:`from aiogram.methods import SendVideoNote` -- :code:`from aiogram.api.methods import SendVideoNote` -- :code:`from aiogram.api.methods.send_video_note import SendVideoNote` +- :code:`from aiogram.methods import SendVideoNote` +- :code:`from aiogram.methods.send_video_note import SendVideoNote` In handlers with current bot ---------------------------- diff --git a/docs2/api/methods/send_voice.rst b/docs2/api/methods/send_voice.rst index a701d8ad..1e19e224 100644 --- a/docs2/api/methods/send_voice.rst +++ b/docs2/api/methods/send_voice.rst @@ -6,7 +6,7 @@ Use this method to send audio files, if you want Telegram clients to display the Returns: :obj:`Message` -.. automodule:: aiogram.api.methods.send_voice +.. automodule:: aiogram.methods.send_voice :members: :member-order: bysource :special-members: __init__ @@ -30,8 +30,8 @@ Method as object Imports: - :code:`from aiogram.methods import SendVoice` -- :code:`from aiogram.api.methods import SendVoice` -- :code:`from aiogram.api.methods.send_voice import SendVoice` +- :code:`from aiogram.methods import SendVoice` +- :code:`from aiogram.methods.send_voice import SendVoice` In handlers with current bot ---------------------------- diff --git a/docs2/api/methods/set_chat_administrator_custom_title.rst b/docs2/api/methods/set_chat_administrator_custom_title.rst index 432365c4..2f48a924 100644 --- a/docs2/api/methods/set_chat_administrator_custom_title.rst +++ b/docs2/api/methods/set_chat_administrator_custom_title.rst @@ -6,7 +6,7 @@ Use this method to set a custom title for an administrator in a supergroup promo Returns: :obj:`bool` -.. automodule:: aiogram.api.methods.set_chat_administrator_custom_title +.. automodule:: aiogram.methods.set_chat_administrator_custom_title :members: :member-order: bysource :special-members: __init__ @@ -30,8 +30,8 @@ Method as object Imports: - :code:`from aiogram.methods import SetChatAdministratorCustomTitle` -- :code:`from aiogram.api.methods import SetChatAdministratorCustomTitle` -- :code:`from aiogram.api.methods.set_chat_administrator_custom_title import SetChatAdministratorCustomTitle` +- :code:`from aiogram.methods import SetChatAdministratorCustomTitle` +- :code:`from aiogram.methods.set_chat_administrator_custom_title import SetChatAdministratorCustomTitle` In handlers with current bot ---------------------------- diff --git a/docs2/api/methods/set_chat_description.rst b/docs2/api/methods/set_chat_description.rst index e5079324..556f033a 100644 --- a/docs2/api/methods/set_chat_description.rst +++ b/docs2/api/methods/set_chat_description.rst @@ -6,7 +6,7 @@ Use this method to change the description of a group, a supergroup or a channel. Returns: :obj:`bool` -.. automodule:: aiogram.api.methods.set_chat_description +.. automodule:: aiogram.methods.set_chat_description :members: :member-order: bysource :special-members: __init__ @@ -30,8 +30,8 @@ Method as object Imports: - :code:`from aiogram.methods import SetChatDescription` -- :code:`from aiogram.api.methods import SetChatDescription` -- :code:`from aiogram.api.methods.set_chat_description import SetChatDescription` +- :code:`from aiogram.methods import SetChatDescription` +- :code:`from aiogram.methods.set_chat_description import SetChatDescription` In handlers with current bot ---------------------------- diff --git a/docs2/api/methods/set_chat_permissions.rst b/docs2/api/methods/set_chat_permissions.rst index e71a64ce..77a69fcf 100644 --- a/docs2/api/methods/set_chat_permissions.rst +++ b/docs2/api/methods/set_chat_permissions.rst @@ -6,7 +6,7 @@ Use this method to set default chat permissions for all members. The bot must be Returns: :obj:`bool` -.. automodule:: aiogram.api.methods.set_chat_permissions +.. automodule:: aiogram.methods.set_chat_permissions :members: :member-order: bysource :special-members: __init__ @@ -30,8 +30,8 @@ Method as object Imports: - :code:`from aiogram.methods import SetChatPermissions` -- :code:`from aiogram.api.methods import SetChatPermissions` -- :code:`from aiogram.api.methods.set_chat_permissions import SetChatPermissions` +- :code:`from aiogram.methods import SetChatPermissions` +- :code:`from aiogram.methods.set_chat_permissions import SetChatPermissions` In handlers with current bot ---------------------------- diff --git a/docs2/api/methods/set_chat_photo.rst b/docs2/api/methods/set_chat_photo.rst index fcfa8431..ad895c65 100644 --- a/docs2/api/methods/set_chat_photo.rst +++ b/docs2/api/methods/set_chat_photo.rst @@ -6,7 +6,7 @@ Use this method to set a new profile photo for the chat. Photos can't be changed Returns: :obj:`bool` -.. automodule:: aiogram.api.methods.set_chat_photo +.. automodule:: aiogram.methods.set_chat_photo :members: :member-order: bysource :special-members: __init__ @@ -30,8 +30,8 @@ Method as object Imports: - :code:`from aiogram.methods import SetChatPhoto` -- :code:`from aiogram.api.methods import SetChatPhoto` -- :code:`from aiogram.api.methods.set_chat_photo import SetChatPhoto` +- :code:`from aiogram.methods import SetChatPhoto` +- :code:`from aiogram.methods.set_chat_photo import SetChatPhoto` In handlers with current bot ---------------------------- diff --git a/docs2/api/methods/set_chat_sticker_set.rst b/docs2/api/methods/set_chat_sticker_set.rst index 3d10066e..dbfd860c 100644 --- a/docs2/api/methods/set_chat_sticker_set.rst +++ b/docs2/api/methods/set_chat_sticker_set.rst @@ -6,7 +6,7 @@ Use this method to set a new group sticker set for a supergroup. The bot must be Returns: :obj:`bool` -.. automodule:: aiogram.api.methods.set_chat_sticker_set +.. automodule:: aiogram.methods.set_chat_sticker_set :members: :member-order: bysource :special-members: __init__ @@ -30,8 +30,8 @@ Method as object Imports: - :code:`from aiogram.methods import SetChatStickerSet` -- :code:`from aiogram.api.methods import SetChatStickerSet` -- :code:`from aiogram.api.methods.set_chat_sticker_set import SetChatStickerSet` +- :code:`from aiogram.methods import SetChatStickerSet` +- :code:`from aiogram.methods.set_chat_sticker_set import SetChatStickerSet` In handlers with current bot ---------------------------- diff --git a/docs2/api/methods/set_chat_title.rst b/docs2/api/methods/set_chat_title.rst index 99c08a3f..c343da43 100644 --- a/docs2/api/methods/set_chat_title.rst +++ b/docs2/api/methods/set_chat_title.rst @@ -6,7 +6,7 @@ Use this method to change the title of a chat. Titles can't be changed for priva Returns: :obj:`bool` -.. automodule:: aiogram.api.methods.set_chat_title +.. automodule:: aiogram.methods.set_chat_title :members: :member-order: bysource :special-members: __init__ @@ -30,8 +30,8 @@ Method as object Imports: - :code:`from aiogram.methods import SetChatTitle` -- :code:`from aiogram.api.methods import SetChatTitle` -- :code:`from aiogram.api.methods.set_chat_title import SetChatTitle` +- :code:`from aiogram.methods import SetChatTitle` +- :code:`from aiogram.methods.set_chat_title import SetChatTitle` In handlers with current bot ---------------------------- diff --git a/docs2/api/methods/set_game_score.rst b/docs2/api/methods/set_game_score.rst index bf50b7c8..7162d34e 100644 --- a/docs2/api/methods/set_game_score.rst +++ b/docs2/api/methods/set_game_score.rst @@ -6,7 +6,7 @@ Use this method to set the score of the specified user in a game. On success, if Returns: :obj:`Union[Message, bool]` -.. automodule:: aiogram.api.methods.set_game_score +.. automodule:: aiogram.methods.set_game_score :members: :member-order: bysource :special-members: __init__ @@ -30,8 +30,8 @@ Method as object Imports: - :code:`from aiogram.methods import SetGameScore` -- :code:`from aiogram.api.methods import SetGameScore` -- :code:`from aiogram.api.methods.set_game_score import SetGameScore` +- :code:`from aiogram.methods import SetGameScore` +- :code:`from aiogram.methods.set_game_score import SetGameScore` In handlers with current bot ---------------------------- diff --git a/docs2/api/methods/set_my_commands.rst b/docs2/api/methods/set_my_commands.rst index 71a89a04..a98fa366 100644 --- a/docs2/api/methods/set_my_commands.rst +++ b/docs2/api/methods/set_my_commands.rst @@ -6,7 +6,7 @@ Use this method to change the list of the bot's commands. Returns True on succes Returns: :obj:`bool` -.. automodule:: aiogram.api.methods.set_my_commands +.. automodule:: aiogram.methods.set_my_commands :members: :member-order: bysource :special-members: __init__ @@ -30,8 +30,8 @@ Method as object Imports: - :code:`from aiogram.methods import SetMyCommands` -- :code:`from aiogram.api.methods import SetMyCommands` -- :code:`from aiogram.api.methods.set_my_commands import SetMyCommands` +- :code:`from aiogram.methods import SetMyCommands` +- :code:`from aiogram.methods.set_my_commands import SetMyCommands` In handlers with current bot ---------------------------- diff --git a/docs2/api/methods/set_passport_data_errors.rst b/docs2/api/methods/set_passport_data_errors.rst index 64b616d7..2b25423c 100644 --- a/docs2/api/methods/set_passport_data_errors.rst +++ b/docs2/api/methods/set_passport_data_errors.rst @@ -8,7 +8,7 @@ Use this if the data submitted by the user doesn't satisfy the standards your se Returns: :obj:`bool` -.. automodule:: aiogram.api.methods.set_passport_data_errors +.. automodule:: aiogram.methods.set_passport_data_errors :members: :member-order: bysource :special-members: __init__ @@ -32,8 +32,8 @@ Method as object Imports: - :code:`from aiogram.methods import SetPassportDataErrors` -- :code:`from aiogram.api.methods import SetPassportDataErrors` -- :code:`from aiogram.api.methods.set_passport_data_errors import SetPassportDataErrors` +- :code:`from aiogram.methods import SetPassportDataErrors` +- :code:`from aiogram.methods.set_passport_data_errors import SetPassportDataErrors` In handlers with current bot ---------------------------- diff --git a/docs2/api/methods/set_sticker_position_in_set.rst b/docs2/api/methods/set_sticker_position_in_set.rst index ec1ed029..ea039919 100644 --- a/docs2/api/methods/set_sticker_position_in_set.rst +++ b/docs2/api/methods/set_sticker_position_in_set.rst @@ -6,7 +6,7 @@ Use this method to move a sticker in a set created by the bot to a specific posi Returns: :obj:`bool` -.. automodule:: aiogram.api.methods.set_sticker_position_in_set +.. automodule:: aiogram.methods.set_sticker_position_in_set :members: :member-order: bysource :special-members: __init__ @@ -30,8 +30,8 @@ Method as object Imports: - :code:`from aiogram.methods import SetStickerPositionInSet` -- :code:`from aiogram.api.methods import SetStickerPositionInSet` -- :code:`from aiogram.api.methods.set_sticker_position_in_set import SetStickerPositionInSet` +- :code:`from aiogram.methods import SetStickerPositionInSet` +- :code:`from aiogram.methods.set_sticker_position_in_set import SetStickerPositionInSet` In handlers with current bot ---------------------------- diff --git a/docs2/api/methods/set_sticker_set_thumb.rst b/docs2/api/methods/set_sticker_set_thumb.rst index 97f5d130..9c534a74 100644 --- a/docs2/api/methods/set_sticker_set_thumb.rst +++ b/docs2/api/methods/set_sticker_set_thumb.rst @@ -6,7 +6,7 @@ Use this method to set the thumbnail of a sticker set. Animated thumbnails can b Returns: :obj:`bool` -.. automodule:: aiogram.api.methods.set_sticker_set_thumb +.. automodule:: aiogram.methods.set_sticker_set_thumb :members: :member-order: bysource :special-members: __init__ @@ -30,8 +30,8 @@ Method as object Imports: - :code:`from aiogram.methods import SetStickerSetThumb` -- :code:`from aiogram.api.methods import SetStickerSetThumb` -- :code:`from aiogram.api.methods.set_sticker_set_thumb import SetStickerSetThumb` +- :code:`from aiogram.methods import SetStickerSetThumb` +- :code:`from aiogram.methods.set_sticker_set_thumb import SetStickerSetThumb` In handlers with current bot ---------------------------- diff --git a/docs2/api/methods/set_webhook.rst b/docs2/api/methods/set_webhook.rst index 38196ccf..9905ad94 100644 --- a/docs2/api/methods/set_webhook.rst +++ b/docs2/api/methods/set_webhook.rst @@ -18,7 +18,7 @@ NEW! If you're having any trouble setting up webhooks, please check out this ama Returns: :obj:`bool` -.. automodule:: aiogram.api.methods.set_webhook +.. automodule:: aiogram.methods.set_webhook :members: :member-order: bysource :special-members: __init__ @@ -42,8 +42,8 @@ Method as object Imports: - :code:`from aiogram.methods import SetWebhook` -- :code:`from aiogram.api.methods import SetWebhook` -- :code:`from aiogram.api.methods.set_webhook import SetWebhook` +- :code:`from aiogram.methods import SetWebhook` +- :code:`from aiogram.methods.set_webhook import SetWebhook` In handlers with current bot ---------------------------- diff --git a/docs2/api/methods/stop_message_live_location.rst b/docs2/api/methods/stop_message_live_location.rst index f5135490..10adc392 100644 --- a/docs2/api/methods/stop_message_live_location.rst +++ b/docs2/api/methods/stop_message_live_location.rst @@ -6,7 +6,7 @@ Use this method to stop updating a live location message before live_period expi Returns: :obj:`Union[Message, bool]` -.. automodule:: aiogram.api.methods.stop_message_live_location +.. automodule:: aiogram.methods.stop_message_live_location :members: :member-order: bysource :special-members: __init__ @@ -30,8 +30,8 @@ Method as object Imports: - :code:`from aiogram.methods import StopMessageLiveLocation` -- :code:`from aiogram.api.methods import StopMessageLiveLocation` -- :code:`from aiogram.api.methods.stop_message_live_location import StopMessageLiveLocation` +- :code:`from aiogram.methods import StopMessageLiveLocation` +- :code:`from aiogram.methods.stop_message_live_location import StopMessageLiveLocation` In handlers with current bot ---------------------------- diff --git a/docs2/api/methods/stop_poll.rst b/docs2/api/methods/stop_poll.rst index fcc4e019..904b26da 100644 --- a/docs2/api/methods/stop_poll.rst +++ b/docs2/api/methods/stop_poll.rst @@ -6,7 +6,7 @@ Use this method to stop a poll which was sent by the bot. On success, the stoppe Returns: :obj:`Poll` -.. automodule:: aiogram.api.methods.stop_poll +.. automodule:: aiogram.methods.stop_poll :members: :member-order: bysource :special-members: __init__ @@ -30,8 +30,8 @@ Method as object Imports: - :code:`from aiogram.methods import StopPoll` -- :code:`from aiogram.api.methods import StopPoll` -- :code:`from aiogram.api.methods.stop_poll import StopPoll` +- :code:`from aiogram.methods import StopPoll` +- :code:`from aiogram.methods.stop_poll import StopPoll` In handlers with current bot ---------------------------- diff --git a/docs2/api/methods/unban_chat_member.rst b/docs2/api/methods/unban_chat_member.rst index 89af3302..4760047c 100644 --- a/docs2/api/methods/unban_chat_member.rst +++ b/docs2/api/methods/unban_chat_member.rst @@ -6,7 +6,7 @@ Use this method to unban a previously kicked user in a supergroup or channel. Th Returns: :obj:`bool` -.. automodule:: aiogram.api.methods.unban_chat_member +.. automodule:: aiogram.methods.unban_chat_member :members: :member-order: bysource :special-members: __init__ @@ -30,8 +30,8 @@ Method as object Imports: - :code:`from aiogram.methods import UnbanChatMember` -- :code:`from aiogram.api.methods import UnbanChatMember` -- :code:`from aiogram.api.methods.unban_chat_member import UnbanChatMember` +- :code:`from aiogram.methods import UnbanChatMember` +- :code:`from aiogram.methods.unban_chat_member import UnbanChatMember` In handlers with current bot ---------------------------- diff --git a/docs2/api/methods/unpin_chat_message.rst b/docs2/api/methods/unpin_chat_message.rst index d364453d..739bb8ae 100644 --- a/docs2/api/methods/unpin_chat_message.rst +++ b/docs2/api/methods/unpin_chat_message.rst @@ -6,7 +6,7 @@ Use this method to unpin a message in a group, a supergroup, or a channel. The b Returns: :obj:`bool` -.. automodule:: aiogram.api.methods.unpin_chat_message +.. automodule:: aiogram.methods.unpin_chat_message :members: :member-order: bysource :special-members: __init__ @@ -30,8 +30,8 @@ Method as object Imports: - :code:`from aiogram.methods import UnpinChatMessage` -- :code:`from aiogram.api.methods import UnpinChatMessage` -- :code:`from aiogram.api.methods.unpin_chat_message import UnpinChatMessage` +- :code:`from aiogram.methods import UnpinChatMessage` +- :code:`from aiogram.methods.unpin_chat_message import UnpinChatMessage` In handlers with current bot ---------------------------- diff --git a/docs2/api/methods/upload_sticker_file.rst b/docs2/api/methods/upload_sticker_file.rst index 03ad6d5a..deb47ada 100644 --- a/docs2/api/methods/upload_sticker_file.rst +++ b/docs2/api/methods/upload_sticker_file.rst @@ -6,7 +6,7 @@ Use this method to upload a .PNG file with a sticker for later use in createNewS Returns: :obj:`File` -.. automodule:: aiogram.api.methods.upload_sticker_file +.. automodule:: aiogram.methods.upload_sticker_file :members: :member-order: bysource :special-members: __init__ @@ -30,8 +30,8 @@ Method as object Imports: - :code:`from aiogram.methods import UploadStickerFile` -- :code:`from aiogram.api.methods import UploadStickerFile` -- :code:`from aiogram.api.methods.upload_sticker_file import UploadStickerFile` +- :code:`from aiogram.methods import UploadStickerFile` +- :code:`from aiogram.methods.upload_sticker_file import UploadStickerFile` In handlers with current bot ---------------------------- diff --git a/docs2/api/session/aiohttp.rst b/docs2/api/session/aiohttp.rst index 007dab69..54b4d72d 100644 --- a/docs2/api/session/aiohttp.rst +++ b/docs2/api/session/aiohttp.rst @@ -12,7 +12,7 @@ Usage example .. code-block:: from aiogram import Bot - from aiogram.api.client.session.aiohttp import AiohttpSession + from aiogram.session.aiohttp import AiohttpSession session = AiohttpSession() Bot('42:token', session=session) @@ -26,8 +26,9 @@ In order to use AiohttpSession with proxy connector you have to install `aiohttp Binding session to bot: .. code-block:: + from aiogram import Bot - from aiogram.api.client.session.aiohttp import AiohttpSession + from aiogram.client.session.aiohttp import AiohttpSession session = AiohttpSession(proxy="protocol://host:port/") Bot(token="bot token", session=session) @@ -50,7 +51,7 @@ Consider examples: .. code-block:: from aiohttp import BasicAuth - from aiogram.api.client.session.aiohttp import AiohttpSession + from aiogram.client.session.aiohttp import AiohttpSession auth = BasicAuth(login="user", password="password") session = AiohttpSession(proxy=("protocol://host:port", auth)) @@ -80,7 +81,7 @@ Example of chain proxies: .. code-block:: from aiohttp import BasicAuth - from aiogram.api.client.session.aiohttp import AiohttpSession + from aiogram.client.session.aiohttp import AiohttpSession auth = BasicAuth(login="user", password="password") session = AiohttpSession( diff --git a/docs2/api/session/base.rst b/docs2/api/session/base.rst index 6a1acd19..adda7e2e 100644 --- a/docs2/api/session/base.rst +++ b/docs2/api/session/base.rst @@ -4,5 +4,5 @@ Base Abstract session for all client sessions -.. autoclass:: aiogram.api.client.session.base.BaseSession +.. autoclass:: aiogram.client.session.base.BaseSession :members: diff --git a/docs2/api/types/animation.rst b/docs2/api/types/animation.rst index 5e140064..731eb3f9 100644 --- a/docs2/api/types/animation.rst +++ b/docs2/api/types/animation.rst @@ -4,7 +4,7 @@ Animation This object represents an animation file (GIF or H.264/MPEG-4 AVC video without sound). -.. automodule:: aiogram.api.types.animation +.. automodule:: aiogram.types.animation :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/audio.rst b/docs2/api/types/audio.rst index 5ddc7047..1ac2eba4 100644 --- a/docs2/api/types/audio.rst +++ b/docs2/api/types/audio.rst @@ -4,7 +4,7 @@ Audio This object represents an audio file to be treated as music by the Telegram clients. -.. automodule:: aiogram.api.types.audio +.. automodule:: aiogram.types.audio :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/bot_command.rst b/docs2/api/types/bot_command.rst index f33cda94..c355045f 100644 --- a/docs2/api/types/bot_command.rst +++ b/docs2/api/types/bot_command.rst @@ -4,7 +4,7 @@ BotCommand This object represents a bot command. -.. automodule:: aiogram.api.types.bot_command +.. automodule:: aiogram.types.bot_command :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/callback_game.rst b/docs2/api/types/callback_game.rst index 9cb6565f..efaec6d3 100644 --- a/docs2/api/types/callback_game.rst +++ b/docs2/api/types/callback_game.rst @@ -4,7 +4,7 @@ CallbackGame A placeholder, currently holds no information. Use BotFather to set up your game. -.. automodule:: aiogram.api.types.callback_game +.. automodule:: aiogram.types.callback_game :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/callback_query.rst b/docs2/api/types/callback_query.rst index 6ef622d1..5a5c14cf 100644 --- a/docs2/api/types/callback_query.rst +++ b/docs2/api/types/callback_query.rst @@ -6,7 +6,7 @@ This object represents an incoming callback query from a callback button in an i NOTE: After the user presses a callback button, Telegram clients will display a progress bar until you call answerCallbackQuery. It is, therefore, necessary to react by calling answerCallbackQuery even if no notification to the user is needed (e.g., without specifying any of the optional parameters). -.. automodule:: aiogram.api.types.callback_query +.. automodule:: aiogram.types.callback_query :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/chat.rst b/docs2/api/types/chat.rst index 04240ef5..01378fdd 100644 --- a/docs2/api/types/chat.rst +++ b/docs2/api/types/chat.rst @@ -4,7 +4,7 @@ Chat This object represents a chat. -.. automodule:: aiogram.api.types.chat +.. automodule:: aiogram.types.chat :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/chat_member.rst b/docs2/api/types/chat_member.rst index 10bcf77f..b52cf717 100644 --- a/docs2/api/types/chat_member.rst +++ b/docs2/api/types/chat_member.rst @@ -4,7 +4,7 @@ ChatMember This object contains information about one member of a chat. -.. automodule:: aiogram.api.types.chat_member +.. automodule:: aiogram.types.chat_member :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/chat_permissions.rst b/docs2/api/types/chat_permissions.rst index 37f611e9..984e0d84 100644 --- a/docs2/api/types/chat_permissions.rst +++ b/docs2/api/types/chat_permissions.rst @@ -4,7 +4,7 @@ ChatPermissions Describes actions that a non-administrator user is allowed to take in a chat. -.. automodule:: aiogram.api.types.chat_permissions +.. automodule:: aiogram.types.chat_permissions :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/chat_photo.rst b/docs2/api/types/chat_photo.rst index 74ab833c..4452b19a 100644 --- a/docs2/api/types/chat_photo.rst +++ b/docs2/api/types/chat_photo.rst @@ -4,7 +4,7 @@ ChatPhoto This object represents a chat photo. -.. automodule:: aiogram.api.types.chat_photo +.. automodule:: aiogram.types.chat_photo :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/chosen_inline_result.rst b/docs2/api/types/chosen_inline_result.rst index 699ffb60..f63bab7b 100644 --- a/docs2/api/types/chosen_inline_result.rst +++ b/docs2/api/types/chosen_inline_result.rst @@ -6,7 +6,7 @@ Represents a result of an inline query that was chosen by the user and sent to t Note: It is necessary to enable inline feedback via @Botfather in order to receive these objects in updates. -.. automodule:: aiogram.api.types.chosen_inline_result +.. automodule:: aiogram.types.chosen_inline_result :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/contact.rst b/docs2/api/types/contact.rst index 32d63abf..e9bef6d6 100644 --- a/docs2/api/types/contact.rst +++ b/docs2/api/types/contact.rst @@ -4,7 +4,7 @@ Contact This object represents a phone contact. -.. automodule:: aiogram.api.types.contact +.. automodule:: aiogram.types.contact :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/dice.rst b/docs2/api/types/dice.rst index 5bfc1a91..e5654dc2 100644 --- a/docs2/api/types/dice.rst +++ b/docs2/api/types/dice.rst @@ -4,7 +4,7 @@ Dice This object represents an animated emoji that displays a random value. -.. automodule:: aiogram.api.types.dice +.. automodule:: aiogram.types.dice :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/document.rst b/docs2/api/types/document.rst index 6f68e824..0e63f422 100644 --- a/docs2/api/types/document.rst +++ b/docs2/api/types/document.rst @@ -4,7 +4,7 @@ Document This object represents a general file (as opposed to photos, voice messages and audio files). -.. automodule:: aiogram.api.types.document +.. automodule:: aiogram.types.document :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/encrypted_credentials.rst b/docs2/api/types/encrypted_credentials.rst index fd05f0a7..a53c1f1d 100644 --- a/docs2/api/types/encrypted_credentials.rst +++ b/docs2/api/types/encrypted_credentials.rst @@ -4,7 +4,7 @@ EncryptedCredentials Contains data required for decrypting and authenticating EncryptedPassportElement. See the Telegram Passport Documentation for a complete description of the data decryption and authentication processes. -.. automodule:: aiogram.api.types.encrypted_credentials +.. automodule:: aiogram.types.encrypted_credentials :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/encrypted_passport_element.rst b/docs2/api/types/encrypted_passport_element.rst index c0e246d2..9fb99a42 100644 --- a/docs2/api/types/encrypted_passport_element.rst +++ b/docs2/api/types/encrypted_passport_element.rst @@ -4,7 +4,7 @@ EncryptedPassportElement Contains information about documents or other Telegram Passport elements shared with the bot by the user. -.. automodule:: aiogram.api.types.encrypted_passport_element +.. automodule:: aiogram.types.encrypted_passport_element :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/file.rst b/docs2/api/types/file.rst index b33c628b..24e00e62 100644 --- a/docs2/api/types/file.rst +++ b/docs2/api/types/file.rst @@ -6,7 +6,7 @@ This object represents a file ready to be downloaded. The file can be downloaded Maximum file size to download is 20 MB -.. automodule:: aiogram.api.types.file +.. automodule:: aiogram.types.file :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/force_reply.rst b/docs2/api/types/force_reply.rst index 66622713..9e923453 100644 --- a/docs2/api/types/force_reply.rst +++ b/docs2/api/types/force_reply.rst @@ -14,7 +14,7 @@ Guide the user through a step-by-step process. 'Please send me your question', ' The last option is definitely more attractive. And if you use ForceReply in your bot's questions, it will receive the user's answers even if it only receives replies, commands and mentions — without any extra work for the user. -.. automodule:: aiogram.api.types.force_reply +.. automodule:: aiogram.types.force_reply :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/game.rst b/docs2/api/types/game.rst index e443ff2a..df08b437 100644 --- a/docs2/api/types/game.rst +++ b/docs2/api/types/game.rst @@ -4,7 +4,7 @@ Game This object represents a game. Use BotFather to create and edit games, their short names will act as unique identifiers. -.. automodule:: aiogram.api.types.game +.. automodule:: aiogram.types.game :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/game_high_score.rst b/docs2/api/types/game_high_score.rst index b8453d01..3ac5372c 100644 --- a/docs2/api/types/game_high_score.rst +++ b/docs2/api/types/game_high_score.rst @@ -8,7 +8,7 @@ And that's about all we've got for now. If you've got any questions, please check out our Bot FAQ -.. automodule:: aiogram.api.types.game_high_score +.. automodule:: aiogram.types.game_high_score :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/index.rst b/docs2/api/types/index.rst index 5cfb1974..68c601fe 100644 --- a/docs2/api/types/index.rst +++ b/docs2/api/types/index.rst @@ -2,7 +2,7 @@ Types ##### -All types is also wrapped with `pydantic `_ and placed in `aiogram.api.types` package. +All types is also wrapped with `pydantic `_ and placed in `aiogram.types` package. In this place makes some more differences with official documentations: - name :attr:`from` was renamed to :attr:`from_user` in due to :attr:`from` is an `keyword in python `_ diff --git a/docs2/api/types/inline_keyboard_button.rst b/docs2/api/types/inline_keyboard_button.rst index d7b78e8e..2526ca77 100644 --- a/docs2/api/types/inline_keyboard_button.rst +++ b/docs2/api/types/inline_keyboard_button.rst @@ -4,7 +4,7 @@ InlineKeyboardButton This object represents one button of an inline keyboard. You must use exactly one of the optional fields. -.. automodule:: aiogram.api.types.inline_keyboard_button +.. automodule:: aiogram.types.inline_keyboard_button :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/inline_keyboard_markup.rst b/docs2/api/types/inline_keyboard_markup.rst index 7641ae0a..34113d43 100644 --- a/docs2/api/types/inline_keyboard_markup.rst +++ b/docs2/api/types/inline_keyboard_markup.rst @@ -6,7 +6,7 @@ This object represents an inline keyboard that appears right next to the message Note: This will only work in Telegram versions released after 9 April, 2016. Older clients will display unsupported message. -.. automodule:: aiogram.api.types.inline_keyboard_markup +.. automodule:: aiogram.types.inline_keyboard_markup :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/inline_query.rst b/docs2/api/types/inline_query.rst index f9f66111..6af1dc16 100644 --- a/docs2/api/types/inline_query.rst +++ b/docs2/api/types/inline_query.rst @@ -4,7 +4,7 @@ InlineQuery This object represents an incoming inline query. When the user sends an empty query, your bot could return some default or trending results. -.. automodule:: aiogram.api.types.inline_query +.. automodule:: aiogram.types.inline_query :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/inline_query_result.rst b/docs2/api/types/inline_query_result.rst index bfc571ef..82467610 100644 --- a/docs2/api/types/inline_query_result.rst +++ b/docs2/api/types/inline_query_result.rst @@ -44,7 +44,7 @@ This object represents one result of an inline query. Telegram clients currently - InlineQueryResultVoice -.. automodule:: aiogram.api.types.inline_query_result +.. automodule:: aiogram.types.inline_query_result :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/inline_query_result_article.rst b/docs2/api/types/inline_query_result_article.rst index 52f68420..0218ceb5 100644 --- a/docs2/api/types/inline_query_result_article.rst +++ b/docs2/api/types/inline_query_result_article.rst @@ -4,7 +4,7 @@ InlineQueryResultArticle Represents a link to an article or web page. -.. automodule:: aiogram.api.types.inline_query_result_article +.. automodule:: aiogram.types.inline_query_result_article :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/inline_query_result_audio.rst b/docs2/api/types/inline_query_result_audio.rst index 84f91fd8..d10242f0 100644 --- a/docs2/api/types/inline_query_result_audio.rst +++ b/docs2/api/types/inline_query_result_audio.rst @@ -6,7 +6,7 @@ Represents a link to an MP3 audio file. By default, this audio file will be sent Note: This will only work in Telegram versions released after 9 April, 2016. Older clients will ignore them. -.. automodule:: aiogram.api.types.inline_query_result_audio +.. automodule:: aiogram.types.inline_query_result_audio :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/inline_query_result_cached_audio.rst b/docs2/api/types/inline_query_result_cached_audio.rst index 961b4465..74abe8aa 100644 --- a/docs2/api/types/inline_query_result_cached_audio.rst +++ b/docs2/api/types/inline_query_result_cached_audio.rst @@ -6,7 +6,7 @@ Represents a link to an MP3 audio file stored on the Telegram servers. By defaul Note: This will only work in Telegram versions released after 9 April, 2016. Older clients will ignore them. -.. automodule:: aiogram.api.types.inline_query_result_cached_audio +.. automodule:: aiogram.types.inline_query_result_cached_audio :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/inline_query_result_cached_document.rst b/docs2/api/types/inline_query_result_cached_document.rst index 3c0a20d7..44ccb859 100644 --- a/docs2/api/types/inline_query_result_cached_document.rst +++ b/docs2/api/types/inline_query_result_cached_document.rst @@ -6,7 +6,7 @@ Represents a link to a file stored on the Telegram servers. By default, this fil Note: This will only work in Telegram versions released after 9 April, 2016. Older clients will ignore them. -.. automodule:: aiogram.api.types.inline_query_result_cached_document +.. automodule:: aiogram.types.inline_query_result_cached_document :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/inline_query_result_cached_gif.rst b/docs2/api/types/inline_query_result_cached_gif.rst index 22979feb..76197701 100644 --- a/docs2/api/types/inline_query_result_cached_gif.rst +++ b/docs2/api/types/inline_query_result_cached_gif.rst @@ -4,7 +4,7 @@ InlineQueryResultCachedGif Represents a link to an animated GIF file stored on the Telegram servers. By default, this animated GIF file will be sent by the user with an optional caption. Alternatively, you can use input_message_content to send a message with specified content instead of the animation. -.. automodule:: aiogram.api.types.inline_query_result_cached_gif +.. automodule:: aiogram.types.inline_query_result_cached_gif :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/inline_query_result_cached_mpeg4_gif.rst b/docs2/api/types/inline_query_result_cached_mpeg4_gif.rst index 779927c1..5d64aee1 100644 --- a/docs2/api/types/inline_query_result_cached_mpeg4_gif.rst +++ b/docs2/api/types/inline_query_result_cached_mpeg4_gif.rst @@ -4,7 +4,7 @@ InlineQueryResultCachedMpeg4Gif Represents a link to a video animation (H.264/MPEG-4 AVC video without sound) stored on the Telegram servers. By default, this animated MPEG-4 file will be sent by the user with an optional caption. Alternatively, you can use input_message_content to send a message with the specified content instead of the animation. -.. automodule:: aiogram.api.types.inline_query_result_cached_mpeg4_gif +.. automodule:: aiogram.types.inline_query_result_cached_mpeg4_gif :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/inline_query_result_cached_photo.rst b/docs2/api/types/inline_query_result_cached_photo.rst index 57cb7602..f45bd8fe 100644 --- a/docs2/api/types/inline_query_result_cached_photo.rst +++ b/docs2/api/types/inline_query_result_cached_photo.rst @@ -4,7 +4,7 @@ InlineQueryResultCachedPhoto Represents a link to a photo stored on the Telegram servers. By default, this photo will be sent by the user with an optional caption. Alternatively, you can use input_message_content to send a message with the specified content instead of the photo. -.. automodule:: aiogram.api.types.inline_query_result_cached_photo +.. automodule:: aiogram.types.inline_query_result_cached_photo :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/inline_query_result_cached_sticker.rst b/docs2/api/types/inline_query_result_cached_sticker.rst index 3ce563a5..3384839b 100644 --- a/docs2/api/types/inline_query_result_cached_sticker.rst +++ b/docs2/api/types/inline_query_result_cached_sticker.rst @@ -6,7 +6,7 @@ Represents a link to a sticker stored on the Telegram servers. By default, this Note: This will only work in Telegram versions released after 9 April, 2016 for static stickers and after 06 July, 2019 for animated stickers. Older clients will ignore them. -.. automodule:: aiogram.api.types.inline_query_result_cached_sticker +.. automodule:: aiogram.types.inline_query_result_cached_sticker :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/inline_query_result_cached_video.rst b/docs2/api/types/inline_query_result_cached_video.rst index 34ee707f..538f060e 100644 --- a/docs2/api/types/inline_query_result_cached_video.rst +++ b/docs2/api/types/inline_query_result_cached_video.rst @@ -4,7 +4,7 @@ InlineQueryResultCachedVideo Represents a link to a video file stored on the Telegram servers. By default, this video file will be sent by the user with an optional caption. Alternatively, you can use input_message_content to send a message with the specified content instead of the video. -.. automodule:: aiogram.api.types.inline_query_result_cached_video +.. automodule:: aiogram.types.inline_query_result_cached_video :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/inline_query_result_cached_voice.rst b/docs2/api/types/inline_query_result_cached_voice.rst index 5d23420b..9c441cee 100644 --- a/docs2/api/types/inline_query_result_cached_voice.rst +++ b/docs2/api/types/inline_query_result_cached_voice.rst @@ -6,7 +6,7 @@ Represents a link to a voice message stored on the Telegram servers. By default, Note: This will only work in Telegram versions released after 9 April, 2016. Older clients will ignore them. -.. automodule:: aiogram.api.types.inline_query_result_cached_voice +.. automodule:: aiogram.types.inline_query_result_cached_voice :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/inline_query_result_contact.rst b/docs2/api/types/inline_query_result_contact.rst index bb914b78..047576df 100644 --- a/docs2/api/types/inline_query_result_contact.rst +++ b/docs2/api/types/inline_query_result_contact.rst @@ -6,7 +6,7 @@ Represents a contact with a phone number. By default, this contact will be sent Note: This will only work in Telegram versions released after 9 April, 2016. Older clients will ignore them. -.. automodule:: aiogram.api.types.inline_query_result_contact +.. automodule:: aiogram.types.inline_query_result_contact :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/inline_query_result_document.rst b/docs2/api/types/inline_query_result_document.rst index 95dfd5e4..46be0e65 100644 --- a/docs2/api/types/inline_query_result_document.rst +++ b/docs2/api/types/inline_query_result_document.rst @@ -6,7 +6,7 @@ Represents a link to a file. By default, this file will be sent by the user with Note: This will only work in Telegram versions released after 9 April, 2016. Older clients will ignore them. -.. automodule:: aiogram.api.types.inline_query_result_document +.. automodule:: aiogram.types.inline_query_result_document :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/inline_query_result_game.rst b/docs2/api/types/inline_query_result_game.rst index dc0aeefb..10f08c96 100644 --- a/docs2/api/types/inline_query_result_game.rst +++ b/docs2/api/types/inline_query_result_game.rst @@ -6,7 +6,7 @@ Represents a Game. Note: This will only work in Telegram versions released after October 1, 2016. Older clients will not display any inline results if a game result is among them. -.. automodule:: aiogram.api.types.inline_query_result_game +.. automodule:: aiogram.types.inline_query_result_game :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/inline_query_result_gif.rst b/docs2/api/types/inline_query_result_gif.rst index 1b77b049..2f94b6c1 100644 --- a/docs2/api/types/inline_query_result_gif.rst +++ b/docs2/api/types/inline_query_result_gif.rst @@ -4,7 +4,7 @@ InlineQueryResultGif Represents a link to an animated GIF file. By default, this animated GIF file will be sent by the user with optional caption. Alternatively, you can use input_message_content to send a message with the specified content instead of the animation. -.. automodule:: aiogram.api.types.inline_query_result_gif +.. automodule:: aiogram.types.inline_query_result_gif :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/inline_query_result_location.rst b/docs2/api/types/inline_query_result_location.rst index 5f2398eb..b8156441 100644 --- a/docs2/api/types/inline_query_result_location.rst +++ b/docs2/api/types/inline_query_result_location.rst @@ -6,7 +6,7 @@ Represents a location on a map. By default, the location will be sent by the use Note: This will only work in Telegram versions released after 9 April, 2016. Older clients will ignore them. -.. automodule:: aiogram.api.types.inline_query_result_location +.. automodule:: aiogram.types.inline_query_result_location :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/inline_query_result_mpeg4_gif.rst b/docs2/api/types/inline_query_result_mpeg4_gif.rst index 8f86c6e5..846d9c1e 100644 --- a/docs2/api/types/inline_query_result_mpeg4_gif.rst +++ b/docs2/api/types/inline_query_result_mpeg4_gif.rst @@ -4,7 +4,7 @@ InlineQueryResultMpeg4Gif Represents a link to a video animation (H.264/MPEG-4 AVC video without sound). By default, this animated MPEG-4 file will be sent by the user with optional caption. Alternatively, you can use input_message_content to send a message with the specified content instead of the animation. -.. automodule:: aiogram.api.types.inline_query_result_mpeg4_gif +.. automodule:: aiogram.types.inline_query_result_mpeg4_gif :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/inline_query_result_photo.rst b/docs2/api/types/inline_query_result_photo.rst index 2bcced4b..d01743d9 100644 --- a/docs2/api/types/inline_query_result_photo.rst +++ b/docs2/api/types/inline_query_result_photo.rst @@ -4,7 +4,7 @@ InlineQueryResultPhoto Represents a link to a photo. By default, this photo will be sent by the user with optional caption. Alternatively, you can use input_message_content to send a message with the specified content instead of the photo. -.. automodule:: aiogram.api.types.inline_query_result_photo +.. automodule:: aiogram.types.inline_query_result_photo :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/inline_query_result_venue.rst b/docs2/api/types/inline_query_result_venue.rst index ca056b56..54cca6c9 100644 --- a/docs2/api/types/inline_query_result_venue.rst +++ b/docs2/api/types/inline_query_result_venue.rst @@ -6,7 +6,7 @@ Represents a venue. By default, the venue will be sent by the user. Alternativel Note: This will only work in Telegram versions released after 9 April, 2016. Older clients will ignore them. -.. automodule:: aiogram.api.types.inline_query_result_venue +.. automodule:: aiogram.types.inline_query_result_venue :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/inline_query_result_video.rst b/docs2/api/types/inline_query_result_video.rst index 9e3dc1f8..addf28bd 100644 --- a/docs2/api/types/inline_query_result_video.rst +++ b/docs2/api/types/inline_query_result_video.rst @@ -6,7 +6,7 @@ Represents a link to a page containing an embedded video player or a video file. If an InlineQueryResultVideo message contains an embedded video (e.g., YouTube), you must replace its content using input_message_content. -.. automodule:: aiogram.api.types.inline_query_result_video +.. automodule:: aiogram.types.inline_query_result_video :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/inline_query_result_voice.rst b/docs2/api/types/inline_query_result_voice.rst index 71c6d9d2..278e13bc 100644 --- a/docs2/api/types/inline_query_result_voice.rst +++ b/docs2/api/types/inline_query_result_voice.rst @@ -6,7 +6,7 @@ Represents a link to a voice recording in an .OGG container encoded with OPUS. B Note: This will only work in Telegram versions released after 9 April, 2016. Older clients will ignore them. -.. automodule:: aiogram.api.types.inline_query_result_voice +.. automodule:: aiogram.types.inline_query_result_voice :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/input_contact_message_content.rst b/docs2/api/types/input_contact_message_content.rst index 0af0edc4..37989885 100644 --- a/docs2/api/types/input_contact_message_content.rst +++ b/docs2/api/types/input_contact_message_content.rst @@ -4,7 +4,7 @@ InputContactMessageContent Represents the content of a contact message to be sent as the result of an inline query. -.. automodule:: aiogram.api.types.input_contact_message_content +.. automodule:: aiogram.types.input_contact_message_content :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/input_file.rst b/docs2/api/types/input_file.rst index 10a17f5d..f206221d 100644 --- a/docs2/api/types/input_file.rst +++ b/docs2/api/types/input_file.rst @@ -4,7 +4,7 @@ InputFile This object represents the contents of a file to be uploaded. Must be posted using multipart/form-data in the usual way that files are uploaded via the browser. -.. automodule:: aiogram.api.types.input_file +.. automodule:: aiogram.types.input_file :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/input_location_message_content.rst b/docs2/api/types/input_location_message_content.rst index b71b5e96..0766b53a 100644 --- a/docs2/api/types/input_location_message_content.rst +++ b/docs2/api/types/input_location_message_content.rst @@ -4,7 +4,7 @@ InputLocationMessageContent Represents the content of a location message to be sent as the result of an inline query. -.. automodule:: aiogram.api.types.input_location_message_content +.. automodule:: aiogram.types.input_location_message_content :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/input_media.rst b/docs2/api/types/input_media.rst index f7ccc7c8..78623975 100644 --- a/docs2/api/types/input_media.rst +++ b/docs2/api/types/input_media.rst @@ -14,7 +14,7 @@ This object represents the content of a media message to be sent. It should be o - InputMediaVideo -.. automodule:: aiogram.api.types.input_media +.. automodule:: aiogram.types.input_media :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/input_media_animation.rst b/docs2/api/types/input_media_animation.rst index af3ad3c6..ed22cbb3 100644 --- a/docs2/api/types/input_media_animation.rst +++ b/docs2/api/types/input_media_animation.rst @@ -4,7 +4,7 @@ InputMediaAnimation Represents an animation file (GIF or H.264/MPEG-4 AVC video without sound) to be sent. -.. automodule:: aiogram.api.types.input_media_animation +.. automodule:: aiogram.types.input_media_animation :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/input_media_audio.rst b/docs2/api/types/input_media_audio.rst index 24320cf0..4d2ec316 100644 --- a/docs2/api/types/input_media_audio.rst +++ b/docs2/api/types/input_media_audio.rst @@ -4,7 +4,7 @@ InputMediaAudio Represents an audio file to be treated as music to be sent. -.. automodule:: aiogram.api.types.input_media_audio +.. automodule:: aiogram.types.input_media_audio :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/input_media_document.rst b/docs2/api/types/input_media_document.rst index 477c2481..42407d1a 100644 --- a/docs2/api/types/input_media_document.rst +++ b/docs2/api/types/input_media_document.rst @@ -4,7 +4,7 @@ InputMediaDocument Represents a general file to be sent. -.. automodule:: aiogram.api.types.input_media_document +.. automodule:: aiogram.types.input_media_document :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/input_media_photo.rst b/docs2/api/types/input_media_photo.rst index a7d8dd94..de5bf37f 100644 --- a/docs2/api/types/input_media_photo.rst +++ b/docs2/api/types/input_media_photo.rst @@ -4,7 +4,7 @@ InputMediaPhoto Represents a photo to be sent. -.. automodule:: aiogram.api.types.input_media_photo +.. automodule:: aiogram.types.input_media_photo :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/input_media_video.rst b/docs2/api/types/input_media_video.rst index d2fc17c6..1c13efc9 100644 --- a/docs2/api/types/input_media_video.rst +++ b/docs2/api/types/input_media_video.rst @@ -4,7 +4,7 @@ InputMediaVideo Represents a video to be sent. -.. automodule:: aiogram.api.types.input_media_video +.. automodule:: aiogram.types.input_media_video :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/input_message_content.rst b/docs2/api/types/input_message_content.rst index 1cfc6552..583a3b52 100644 --- a/docs2/api/types/input_message_content.rst +++ b/docs2/api/types/input_message_content.rst @@ -12,7 +12,7 @@ This object represents the content of a message to be sent as a result of an inl - InputContactMessageContent -.. automodule:: aiogram.api.types.input_message_content +.. automodule:: aiogram.types.input_message_content :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/input_text_message_content.rst b/docs2/api/types/input_text_message_content.rst index da9dd784..c6f8cbae 100644 --- a/docs2/api/types/input_text_message_content.rst +++ b/docs2/api/types/input_text_message_content.rst @@ -4,7 +4,7 @@ InputTextMessageContent Represents the content of a text message to be sent as the result of an inline query. -.. automodule:: aiogram.api.types.input_text_message_content +.. automodule:: aiogram.types.input_text_message_content :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/input_venue_message_content.rst b/docs2/api/types/input_venue_message_content.rst index d7458c1b..256f9a15 100644 --- a/docs2/api/types/input_venue_message_content.rst +++ b/docs2/api/types/input_venue_message_content.rst @@ -4,7 +4,7 @@ InputVenueMessageContent Represents the content of a venue message to be sent as the result of an inline query. -.. automodule:: aiogram.api.types.input_venue_message_content +.. automodule:: aiogram.types.input_venue_message_content :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/invoice.rst b/docs2/api/types/invoice.rst index f427e2e1..981ef2f6 100644 --- a/docs2/api/types/invoice.rst +++ b/docs2/api/types/invoice.rst @@ -4,7 +4,7 @@ Invoice This object contains basic information about an invoice. -.. automodule:: aiogram.api.types.invoice +.. automodule:: aiogram.types.invoice :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/keyboard_button.rst b/docs2/api/types/keyboard_button.rst index 741b3da8..bddabe20 100644 --- a/docs2/api/types/keyboard_button.rst +++ b/docs2/api/types/keyboard_button.rst @@ -8,7 +8,7 @@ Note: request_contact and request_location options will only work in Telegram ve Note: request_poll option will only work in Telegram versions released after 23 January, 2020. Older clients will display unsupported message. -.. automodule:: aiogram.api.types.keyboard_button +.. automodule:: aiogram.types.keyboard_button :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/keyboard_button_poll_type.rst b/docs2/api/types/keyboard_button_poll_type.rst index eae38e30..398778ab 100644 --- a/docs2/api/types/keyboard_button_poll_type.rst +++ b/docs2/api/types/keyboard_button_poll_type.rst @@ -4,7 +4,7 @@ KeyboardButtonPollType This object represents type of a poll, which is allowed to be created and sent when the corresponding button is pressed. -.. automodule:: aiogram.api.types.keyboard_button_poll_type +.. automodule:: aiogram.types.keyboard_button_poll_type :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/labeled_price.rst b/docs2/api/types/labeled_price.rst index 557359c0..1c8bcc1e 100644 --- a/docs2/api/types/labeled_price.rst +++ b/docs2/api/types/labeled_price.rst @@ -4,7 +4,7 @@ LabeledPrice This object represents a portion of the price for goods or services. -.. automodule:: aiogram.api.types.labeled_price +.. automodule:: aiogram.types.labeled_price :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/location.rst b/docs2/api/types/location.rst index aed07d25..d15fd18c 100644 --- a/docs2/api/types/location.rst +++ b/docs2/api/types/location.rst @@ -4,7 +4,7 @@ Location This object represents a point on the map. -.. automodule:: aiogram.api.types.location +.. automodule:: aiogram.types.location :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/login_url.rst b/docs2/api/types/login_url.rst index 56c9229f..f625bfb3 100644 --- a/docs2/api/types/login_url.rst +++ b/docs2/api/types/login_url.rst @@ -8,7 +8,7 @@ Telegram apps support these buttons as of version 5.7. Sample bot: @discussbot -.. automodule:: aiogram.api.types.login_url +.. automodule:: aiogram.types.login_url :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/mask_position.rst b/docs2/api/types/mask_position.rst index 11d7e71b..c8410052 100644 --- a/docs2/api/types/mask_position.rst +++ b/docs2/api/types/mask_position.rst @@ -4,7 +4,7 @@ MaskPosition This object describes the position on faces where a mask should be placed by default. -.. automodule:: aiogram.api.types.mask_position +.. automodule:: aiogram.types.mask_position :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/message.rst b/docs2/api/types/message.rst index d2dfc7b6..56fad490 100644 --- a/docs2/api/types/message.rst +++ b/docs2/api/types/message.rst @@ -4,7 +4,7 @@ Message This object represents a message. -.. automodule:: aiogram.api.types.message +.. automodule:: aiogram.types.message :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/message_entity.rst b/docs2/api/types/message_entity.rst index 87dfc66b..5d025e8e 100644 --- a/docs2/api/types/message_entity.rst +++ b/docs2/api/types/message_entity.rst @@ -4,7 +4,7 @@ MessageEntity This object represents one special entity in a text message. For example, hashtags, usernames, URLs, etc. -.. automodule:: aiogram.api.types.message_entity +.. automodule:: aiogram.types.message_entity :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/order_info.rst b/docs2/api/types/order_info.rst index cb0a66cd..508b3ff4 100644 --- a/docs2/api/types/order_info.rst +++ b/docs2/api/types/order_info.rst @@ -4,7 +4,7 @@ OrderInfo This object represents information about an order. -.. automodule:: aiogram.api.types.order_info +.. automodule:: aiogram.types.order_info :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/passport_data.rst b/docs2/api/types/passport_data.rst index e618c39f..05c50e44 100644 --- a/docs2/api/types/passport_data.rst +++ b/docs2/api/types/passport_data.rst @@ -4,7 +4,7 @@ PassportData Contains information about Telegram Passport data shared with the bot by the user. -.. automodule:: aiogram.api.types.passport_data +.. automodule:: aiogram.types.passport_data :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/passport_element_error.rst b/docs2/api/types/passport_element_error.rst index 174aa734..15c4c148 100644 --- a/docs2/api/types/passport_element_error.rst +++ b/docs2/api/types/passport_element_error.rst @@ -22,7 +22,7 @@ This object represents an error in the Telegram Passport element which was submi - PassportElementErrorUnspecified -.. automodule:: aiogram.api.types.passport_element_error +.. automodule:: aiogram.types.passport_element_error :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/passport_element_error_data_field.rst b/docs2/api/types/passport_element_error_data_field.rst index 114b0982..83505375 100644 --- a/docs2/api/types/passport_element_error_data_field.rst +++ b/docs2/api/types/passport_element_error_data_field.rst @@ -4,7 +4,7 @@ PassportElementErrorDataField Represents an issue in one of the data fields that was provided by the user. The error is considered resolved when the field's value changes. -.. automodule:: aiogram.api.types.passport_element_error_data_field +.. automodule:: aiogram.types.passport_element_error_data_field :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/passport_element_error_file.rst b/docs2/api/types/passport_element_error_file.rst index 79a7c15e..7a61baa2 100644 --- a/docs2/api/types/passport_element_error_file.rst +++ b/docs2/api/types/passport_element_error_file.rst @@ -4,7 +4,7 @@ PassportElementErrorFile Represents an issue with a document scan. The error is considered resolved when the file with the document scan changes. -.. automodule:: aiogram.api.types.passport_element_error_file +.. automodule:: aiogram.types.passport_element_error_file :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/passport_element_error_files.rst b/docs2/api/types/passport_element_error_files.rst index 631c972b..28996227 100644 --- a/docs2/api/types/passport_element_error_files.rst +++ b/docs2/api/types/passport_element_error_files.rst @@ -4,7 +4,7 @@ PassportElementErrorFiles Represents an issue with a list of scans. The error is considered resolved when the list of files containing the scans changes. -.. automodule:: aiogram.api.types.passport_element_error_files +.. automodule:: aiogram.types.passport_element_error_files :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/passport_element_error_front_side.rst b/docs2/api/types/passport_element_error_front_side.rst index 9437891a..eec4f662 100644 --- a/docs2/api/types/passport_element_error_front_side.rst +++ b/docs2/api/types/passport_element_error_front_side.rst @@ -4,7 +4,7 @@ PassportElementErrorFrontSide Represents an issue with the front side of a document. The error is considered resolved when the file with the front side of the document changes. -.. automodule:: aiogram.api.types.passport_element_error_front_side +.. automodule:: aiogram.types.passport_element_error_front_side :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/passport_element_error_reverse_side.rst b/docs2/api/types/passport_element_error_reverse_side.rst index 1cc1a4b3..f61673da 100644 --- a/docs2/api/types/passport_element_error_reverse_side.rst +++ b/docs2/api/types/passport_element_error_reverse_side.rst @@ -4,7 +4,7 @@ PassportElementErrorReverseSide Represents an issue with the reverse side of a document. The error is considered resolved when the file with reverse side of the document changes. -.. automodule:: aiogram.api.types.passport_element_error_reverse_side +.. automodule:: aiogram.types.passport_element_error_reverse_side :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/passport_element_error_selfie.rst b/docs2/api/types/passport_element_error_selfie.rst index 4ebeed35..af4bd0f7 100644 --- a/docs2/api/types/passport_element_error_selfie.rst +++ b/docs2/api/types/passport_element_error_selfie.rst @@ -4,7 +4,7 @@ PassportElementErrorSelfie Represents an issue with the selfie with a document. The error is considered resolved when the file with the selfie changes. -.. automodule:: aiogram.api.types.passport_element_error_selfie +.. automodule:: aiogram.types.passport_element_error_selfie :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/passport_element_error_translation_file.rst b/docs2/api/types/passport_element_error_translation_file.rst index 41d50c21..970fea03 100644 --- a/docs2/api/types/passport_element_error_translation_file.rst +++ b/docs2/api/types/passport_element_error_translation_file.rst @@ -4,7 +4,7 @@ PassportElementErrorTranslationFile Represents an issue with one of the files that constitute the translation of a document. The error is considered resolved when the file changes. -.. automodule:: aiogram.api.types.passport_element_error_translation_file +.. automodule:: aiogram.types.passport_element_error_translation_file :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/passport_element_error_translation_files.rst b/docs2/api/types/passport_element_error_translation_files.rst index f82a2663..b3c30613 100644 --- a/docs2/api/types/passport_element_error_translation_files.rst +++ b/docs2/api/types/passport_element_error_translation_files.rst @@ -4,7 +4,7 @@ PassportElementErrorTranslationFiles Represents an issue with the translated version of a document. The error is considered resolved when a file with the document translation change. -.. automodule:: aiogram.api.types.passport_element_error_translation_files +.. automodule:: aiogram.types.passport_element_error_translation_files :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/passport_element_error_unspecified.rst b/docs2/api/types/passport_element_error_unspecified.rst index 3556729a..efd1519f 100644 --- a/docs2/api/types/passport_element_error_unspecified.rst +++ b/docs2/api/types/passport_element_error_unspecified.rst @@ -4,7 +4,7 @@ PassportElementErrorUnspecified Represents an issue in an unspecified place. The error is considered resolved when new data is added. -.. automodule:: aiogram.api.types.passport_element_error_unspecified +.. automodule:: aiogram.types.passport_element_error_unspecified :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/passport_file.rst b/docs2/api/types/passport_file.rst index 358e12a7..321bd33e 100644 --- a/docs2/api/types/passport_file.rst +++ b/docs2/api/types/passport_file.rst @@ -4,7 +4,7 @@ PassportFile This object represents a file uploaded to Telegram Passport. Currently all Telegram Passport files are in JPEG format when decrypted and don't exceed 10MB. -.. automodule:: aiogram.api.types.passport_file +.. automodule:: aiogram.types.passport_file :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/photo_size.rst b/docs2/api/types/photo_size.rst index 6503bab3..a091af19 100644 --- a/docs2/api/types/photo_size.rst +++ b/docs2/api/types/photo_size.rst @@ -4,7 +4,7 @@ PhotoSize This object represents one size of a photo or a file / sticker thumbnail. -.. automodule:: aiogram.api.types.photo_size +.. automodule:: aiogram.types.photo_size :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/poll.rst b/docs2/api/types/poll.rst index f5cb8f73..a0136b44 100644 --- a/docs2/api/types/poll.rst +++ b/docs2/api/types/poll.rst @@ -4,7 +4,7 @@ Poll This object contains information about a poll. -.. automodule:: aiogram.api.types.poll +.. automodule:: aiogram.types.poll :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/poll_answer.rst b/docs2/api/types/poll_answer.rst index ddd56d32..079807eb 100644 --- a/docs2/api/types/poll_answer.rst +++ b/docs2/api/types/poll_answer.rst @@ -4,7 +4,7 @@ PollAnswer This object represents an answer of a user in a non-anonymous poll. -.. automodule:: aiogram.api.types.poll_answer +.. automodule:: aiogram.types.poll_answer :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/poll_option.rst b/docs2/api/types/poll_option.rst index c5159c94..9dd676e5 100644 --- a/docs2/api/types/poll_option.rst +++ b/docs2/api/types/poll_option.rst @@ -4,7 +4,7 @@ PollOption This object contains information about one answer option in a poll. -.. automodule:: aiogram.api.types.poll_option +.. automodule:: aiogram.types.poll_option :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/pre_checkout_query.rst b/docs2/api/types/pre_checkout_query.rst index 757a951c..5d25b291 100644 --- a/docs2/api/types/pre_checkout_query.rst +++ b/docs2/api/types/pre_checkout_query.rst @@ -4,7 +4,7 @@ PreCheckoutQuery This object contains information about an incoming pre-checkout query. -.. automodule:: aiogram.api.types.pre_checkout_query +.. automodule:: aiogram.types.pre_checkout_query :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/reply_keyboard_markup.rst b/docs2/api/types/reply_keyboard_markup.rst index 34c83b86..66c83a83 100644 --- a/docs2/api/types/reply_keyboard_markup.rst +++ b/docs2/api/types/reply_keyboard_markup.rst @@ -4,7 +4,7 @@ ReplyKeyboardMarkup This object represents a custom keyboard with reply options (see Introduction to bots for details and examples). -.. automodule:: aiogram.api.types.reply_keyboard_markup +.. automodule:: aiogram.types.reply_keyboard_markup :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/reply_keyboard_remove.rst b/docs2/api/types/reply_keyboard_remove.rst index 2dddb8d7..ea65a907 100644 --- a/docs2/api/types/reply_keyboard_remove.rst +++ b/docs2/api/types/reply_keyboard_remove.rst @@ -4,7 +4,7 @@ ReplyKeyboardRemove Upon receiving a message with this object, Telegram clients will remove the current custom keyboard and display the default letter-keyboard. By default, custom keyboards are displayed until a new keyboard is sent by a bot. An exception is made for one-time keyboards that are hidden immediately after the user presses a button (see ReplyKeyboardMarkup). -.. automodule:: aiogram.api.types.reply_keyboard_remove +.. automodule:: aiogram.types.reply_keyboard_remove :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/response_parameters.rst b/docs2/api/types/response_parameters.rst index 93b13fb5..b4f9f739 100644 --- a/docs2/api/types/response_parameters.rst +++ b/docs2/api/types/response_parameters.rst @@ -4,7 +4,7 @@ ResponseParameters Contains information about why a request was unsuccessful. -.. automodule:: aiogram.api.types.response_parameters +.. automodule:: aiogram.types.response_parameters :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/shipping_address.rst b/docs2/api/types/shipping_address.rst index 8a4d4571..d36ca404 100644 --- a/docs2/api/types/shipping_address.rst +++ b/docs2/api/types/shipping_address.rst @@ -4,7 +4,7 @@ ShippingAddress This object represents a shipping address. -.. automodule:: aiogram.api.types.shipping_address +.. automodule:: aiogram.types.shipping_address :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/shipping_option.rst b/docs2/api/types/shipping_option.rst index cba2de77..612613d8 100644 --- a/docs2/api/types/shipping_option.rst +++ b/docs2/api/types/shipping_option.rst @@ -4,7 +4,7 @@ ShippingOption This object represents one shipping option. -.. automodule:: aiogram.api.types.shipping_option +.. automodule:: aiogram.types.shipping_option :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/shipping_query.rst b/docs2/api/types/shipping_query.rst index bc7a3514..07213c9a 100644 --- a/docs2/api/types/shipping_query.rst +++ b/docs2/api/types/shipping_query.rst @@ -4,7 +4,7 @@ ShippingQuery This object contains information about an incoming shipping query. -.. automodule:: aiogram.api.types.shipping_query +.. automodule:: aiogram.types.shipping_query :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/sticker.rst b/docs2/api/types/sticker.rst index 3b6b4e1d..1adca43f 100644 --- a/docs2/api/types/sticker.rst +++ b/docs2/api/types/sticker.rst @@ -4,7 +4,7 @@ Sticker This object represents a sticker. -.. automodule:: aiogram.api.types.sticker +.. automodule:: aiogram.types.sticker :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/sticker_set.rst b/docs2/api/types/sticker_set.rst index 2f19ce47..32af00d2 100644 --- a/docs2/api/types/sticker_set.rst +++ b/docs2/api/types/sticker_set.rst @@ -4,7 +4,7 @@ StickerSet This object represents a sticker set. -.. automodule:: aiogram.api.types.sticker_set +.. automodule:: aiogram.types.sticker_set :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/successful_payment.rst b/docs2/api/types/successful_payment.rst index 240b3cea..dd35af97 100644 --- a/docs2/api/types/successful_payment.rst +++ b/docs2/api/types/successful_payment.rst @@ -4,7 +4,7 @@ SuccessfulPayment This object contains basic information about a successful payment. -.. automodule:: aiogram.api.types.successful_payment +.. automodule:: aiogram.types.successful_payment :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/update.rst b/docs2/api/types/update.rst index 88beec50..50873f74 100644 --- a/docs2/api/types/update.rst +++ b/docs2/api/types/update.rst @@ -6,7 +6,7 @@ This object represents an incoming update. At most one of the optional parameters can be present in any given update. -.. automodule:: aiogram.api.types.update +.. automodule:: aiogram.types.update :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/user.rst b/docs2/api/types/user.rst index 7e47d251..662eb2a9 100644 --- a/docs2/api/types/user.rst +++ b/docs2/api/types/user.rst @@ -4,7 +4,7 @@ User This object represents a Telegram user or bot. -.. automodule:: aiogram.api.types.user +.. automodule:: aiogram.types.user :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/user_profile_photos.rst b/docs2/api/types/user_profile_photos.rst index f1d4516e..e1aceb49 100644 --- a/docs2/api/types/user_profile_photos.rst +++ b/docs2/api/types/user_profile_photos.rst @@ -4,7 +4,7 @@ UserProfilePhotos This object represent a user's profile pictures. -.. automodule:: aiogram.api.types.user_profile_photos +.. automodule:: aiogram.types.user_profile_photos :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/venue.rst b/docs2/api/types/venue.rst index 31c99522..3feba747 100644 --- a/docs2/api/types/venue.rst +++ b/docs2/api/types/venue.rst @@ -4,7 +4,7 @@ Venue This object represents a venue. -.. automodule:: aiogram.api.types.venue +.. automodule:: aiogram.types.venue :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/video.rst b/docs2/api/types/video.rst index bb0ed56a..68db64da 100644 --- a/docs2/api/types/video.rst +++ b/docs2/api/types/video.rst @@ -4,7 +4,7 @@ Video This object represents a video file. -.. automodule:: aiogram.api.types.video +.. automodule:: aiogram.types.video :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/video_note.rst b/docs2/api/types/video_note.rst index e8177d09..57c9cf6e 100644 --- a/docs2/api/types/video_note.rst +++ b/docs2/api/types/video_note.rst @@ -4,7 +4,7 @@ VideoNote This object represents a video message (available in Telegram apps as of v.4.0). -.. automodule:: aiogram.api.types.video_note +.. automodule:: aiogram.types.video_note :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/voice.rst b/docs2/api/types/voice.rst index bf101e94..2b3d1e7f 100644 --- a/docs2/api/types/voice.rst +++ b/docs2/api/types/voice.rst @@ -4,7 +4,7 @@ Voice This object represents a voice note. -.. automodule:: aiogram.api.types.voice +.. automodule:: aiogram.types.voice :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/types/webhook_info.rst b/docs2/api/types/webhook_info.rst index d7c1f788..17dbc737 100644 --- a/docs2/api/types/webhook_info.rst +++ b/docs2/api/types/webhook_info.rst @@ -4,7 +4,7 @@ WebhookInfo Contains information about the current status of a webhook. -.. automodule:: aiogram.api.types.webhook_info +.. automodule:: aiogram.types.webhook_info :members: :member-order: bysource :special-members: __init__ diff --git a/docs2/api/upload_file.rst b/docs2/api/upload_file.rst index 9e63754b..f9e8610c 100644 --- a/docs2/api/upload_file.rst +++ b/docs2/api/upload_file.rst @@ -42,7 +42,7 @@ Then you can use it: agenda = FSInputFile("my-document.pdf", filename="agenda-2019-11-19.pdf") -.. autoclass:: aiogram.api.types.input_file.FSInputFile +.. autoclass:: aiogram.types.input_file.FSInputFile :members: @@ -65,7 +65,7 @@ And then you can use it: text_file = BufferedInputFile(b"Hello, world!", filename="file.txt") -.. autoclass:: aiogram.api.types.input_file.BufferedInputFile +.. autoclass:: aiogram.types.input_file.BufferedInputFile :members: Upload from url @@ -90,5 +90,5 @@ And then you can use it: filename="python-logo.png" ) -.. autoclass:: aiogram.api.types.input_file.URLInputFile +.. autoclass:: aiogram.types.input_file.URLInputFile :members: diff --git a/docs2/conf.py b/docs2/conf.py index 03e0cda7..c957d4e8 100644 --- a/docs2/conf.py +++ b/docs2/conf.py @@ -9,15 +9,16 @@ release = aiogram.__version__ api_version = aiogram.__api_version__ templates_path = ["_templates"] -html_theme = "sphinx_rtd_theme" -html_icon = "_static/logo.png" +html_theme = "furo" +html_logo = "_static/logo.png" html_static_path = ["_static"] todo_include_todos = True -# pygments_style = "sphinx" +pygments_style = "sphinx" htmlhelp_basename = project -html_theme_options = { - 'collapse_navigation': False, -} +html_theme_options = {} +html_css_files = [ + "stylesheets/extra.css", +] extensions = [ "sphinx_rtd_theme", @@ -27,6 +28,7 @@ extensions = [ "sphinx.ext.ifconfig", "sphinx-prompt", "sphinx_substitution_extensions", + "sphinx_copybutton", ] rst_prolog = f""" diff --git a/poetry.lock b/poetry.lock index 178432ef..a24c9337 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,152 +1,165 @@ [[package]] -category = "main" -description = "File support for asyncio." name = "aiofiles" +version = "0.4.0" +description = "File support for asyncio." +category = "main" optional = false python-versions = "*" -version = "0.4.0" [[package]] -category = "main" -description = "Async http client/server framework (asyncio)" name = "aiohttp" +version = "3.7.2" +description = "Async http client/server framework (asyncio)" +category = "main" optional = false -python-versions = ">=3.5.3" -version = "3.6.2" +python-versions = ">=3.6" [package.dependencies] async-timeout = ">=3.0,<4.0" attrs = ">=17.3.0" chardet = ">=2.0,<4.0" -multidict = ">=4.5,<5.0" +multidict = ">=4.5,<7.0" +typing-extensions = ">=3.6.5" yarl = ">=1.0,<2.0" [package.extras] speedups = ["aiodns", "brotlipy", "cchardet"] [[package]] -category = "main" -description = "Proxy connector for aiohttp" name = "aiohttp-socks" +version = "0.3.9" +description = "Proxy connector for aiohttp" +category = "main" optional = false python-versions = "*" -version = "0.3.9" [package.dependencies] aiohttp = ">=2.3.2" attrs = ">=19.2.0" [[package]] -category = "dev" -description = "A configurable sidebar-enabled Sphinx theme" name = "alabaster" -optional = false -python-versions = "*" version = "0.7.12" +description = "A configurable sidebar-enabled Sphinx theme" +category = "dev" +optional = false +python-versions = "*" [[package]] -category = "dev" -description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." name = "appdirs" -optional = false -python-versions = "*" version = "1.4.4" - -[[package]] +description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." category = "dev" -description = "Disable App Nap on OS X 10.9" -marker = "sys_platform == \"darwin\"" -name = "appnope" optional = false python-versions = "*" -version = "0.1.0" [[package]] +name = "appnope" +version = "0.1.0" +description = "Disable App Nap on OS X 10.9" category = "dev" -description = "Asyncio testing server. Similar to the responses library used for 'requests'" +optional = false +python-versions = "*" + +[[package]] name = "aresponses" +version = "1.1.2" +description = "Asyncio testing server. Similar to the responses library used for 'requests'" +category = "dev" optional = false python-versions = ">=3.6" -version = "1.1.2" [package.dependencies] aiohttp = ">=3.1.0,<4.0.0" pytest-asyncio = "*" [[package]] -category = "main" -description = "Simple lru_cache for asyncio" name = "async-lru" +version = "1.0.2" +description = "Simple lru_cache for asyncio" +category = "main" optional = false python-versions = "*" -version = "1.0.2" [[package]] -category = "main" -description = "Timeout context manager for asyncio programs" name = "async-timeout" +version = "3.0.1" +description = "Timeout context manager for asyncio programs" +category = "main" optional = false python-versions = ">=3.5.3" -version = "3.0.1" [[package]] -category = "dev" -description = "Enhance the standard unittest package with features for testing asyncio libraries" -marker = "python_version < \"3.8\"" name = "asynctest" +version = "0.13.0" +description = "Enhance the standard unittest package with features for testing asyncio libraries" +category = "dev" optional = false python-versions = ">=3.5" -version = "0.13.0" [[package]] -category = "dev" -description = "Atomic file writes." -marker = "python_version >= \"3.5\" and sys_platform == \"win32\" or sys_platform == \"win32\"" name = "atomicwrites" +version = "1.4.0" +description = "Atomic file writes." +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "1.4.0" [[package]] -category = "main" -description = "Classes Without Boilerplate" name = "attrs" +version = "20.3.0" +description = "Classes Without Boilerplate" +category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "19.3.0" [package.extras] -azure-pipelines = ["coverage", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface", "pytest-azurepipelines"] -dev = ["coverage", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface", "sphinx", "pre-commit"] -docs = ["sphinx", "zope.interface"] -tests = ["coverage", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface"] +dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface", "furo", "sphinx", "pre-commit"] +docs = ["furo", "sphinx", "zope.interface"] +tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface"] +tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six"] [[package]] -category = "main" -description = "Internationalization utilities" name = "babel" +version = "2.9.0" +description = "Internationalization utilities" +category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "2.8.0" [package.dependencies] pytz = ">=2015.7" [[package]] -category = "dev" -description = "Specifications for callback functions passed in to an API" name = "backcall" +version = "0.2.0" +description = "Specifications for callback functions passed in to an API" +category = "dev" optional = false python-versions = "*" -version = "0.2.0" [[package]] +name = "beautifulsoup4" +version = "4.9.3" +description = "Screen-scraping library" category = "dev" -description = "The uncompromising code formatter." +optional = false +python-versions = "*" + +[package.dependencies] +soupsieve = {version = ">1.2", markers = "python_version >= \"3.0\""} + +[package.extras] +html5lib = ["html5lib"] +lxml = ["lxml"] + +[[package]] name = "black" +version = "19.10b0" +description = "The uncompromising code formatter." +category = "dev" optional = false python-versions = ">=3.6" -version = "19.10b0" [package.dependencies] appdirs = "*" @@ -161,193 +174,201 @@ typed-ast = ">=1.4.0" d = ["aiohttp (>=3.3.2)", "aiohttp-cors"] [[package]] -category = "dev" -description = "httplib2 caching for requests" name = "cachecontrol" +version = "0.12.6" +description = "httplib2 caching for requests" +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "0.12.6" [package.dependencies] +lockfile = {version = ">=0.9", optional = true, markers = "extra == \"filecache\""} msgpack = ">=0.5.2" requests = "*" -[package.dependencies.lockfile] -optional = true -version = ">=0.9" - [package.extras] filecache = ["lockfile (>=0.9)"] redis = ["redis (>=2.10.5)"] [[package]] -category = "dev" -description = "Cachy provides a simple yet effective caching library." name = "cachy" +version = "0.3.0" +description = "Cachy provides a simple yet effective caching library." +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "0.3.0" [package.extras] +redis = ["redis (>=3.3.6,<4.0.0)"] memcached = ["python-memcached (>=1.59,<2.0)"] msgpack = ["msgpack-python (>=0.5,<0.6)"] -redis = ["redis (>=3.3.6,<4.0.0)"] [[package]] -category = "dev" -description = "Python package for providing Mozilla's CA Bundle." name = "certifi" +version = "2020.11.8" +description = "Python package for providing Mozilla's CA Bundle." +category = "dev" optional = false python-versions = "*" -version = "2020.4.5.2" [[package]] -category = "dev" -description = "Foreign Function Interface for Python calling C code." -marker = "python_version >= \"3.5\" and python_version < \"4.0\" and sys_platform == \"linux\"" name = "cffi" +version = "1.14.3" +description = "Foreign Function Interface for Python calling C code." +category = "dev" optional = false python-versions = "*" -version = "1.14.0" [package.dependencies] pycparser = "*" [[package]] -category = "dev" -description = "Validate configuration and produce human readable error messages." name = "cfgv" +version = "3.2.0" +description = "Validate configuration and produce human readable error messages." +category = "dev" optional = false python-versions = ">=3.6.1" -version = "3.1.0" [[package]] -category = "main" -description = "Universal encoding detector for Python 2 and 3" name = "chardet" +version = "3.0.4" +description = "Universal encoding detector for Python 2 and 3" +category = "main" optional = false python-versions = "*" -version = "3.0.4" [[package]] -category = "dev" -description = "Cleo allows you to create beautiful and testable command-line interfaces." name = "cleo" +version = "0.8.1" +description = "Cleo allows you to create beautiful and testable command-line interfaces." +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "0.7.6" [package.dependencies] -clikit = ">=0.4.0,<0.5.0" +clikit = ">=0.6.0,<0.7.0" [[package]] -category = "dev" -description = "Composable command line interface toolkit" name = "click" +version = "7.1.2" +description = "Composable command line interface toolkit" +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -version = "7.1.2" [[package]] -category = "dev" -description = "CliKit is a group of utilities to build beautiful and testable command line interfaces." name = "clikit" +version = "0.6.2" +description = "CliKit is a group of utilities to build beautiful and testable command line interfaces." +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "0.4.3" [package.dependencies] +crashtest = {version = ">=0.3.0,<0.4.0", markers = "python_version >= \"3.6\" and python_version < \"4.0\""} pastel = ">=0.2.0,<0.3.0" pylev = ">=1.3,<2.0" [[package]] -category = "dev" -description = "Cross-platform colored terminal text." -marker = "python_version >= \"3.5\" and sys_platform == \"win32\" or sys_platform == \"win32\"" name = "colorama" +version = "0.4.4" +description = "Cross-platform colored terminal text." +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -version = "0.4.3" [[package]] -category = "dev" -description = "Code coverage measurement for Python" name = "coverage" +version = "5.3" +description = "Code coverage measurement for Python" +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4" -version = "5.1" [package.extras] toml = ["toml"] [[package]] +name = "crashtest" +version = "0.3.1" +description = "Manage Python errors with ease" category = "dev" -description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." -marker = "python_version >= \"3.5\" and python_version < \"4.0\" and sys_platform == \"linux\"" +optional = false +python-versions = ">=3.6,<4.0" + +[[package]] name = "cryptography" +version = "3.2.1" +description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." +category = "dev" optional = false python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*" -version = "2.9.2" [package.dependencies] cffi = ">=1.8,<1.11.3 || >1.11.3" six = ">=1.4.1" [package.extras] -docs = ["sphinx (>=1.6.5,<1.8.0 || >1.8.0)", "sphinx-rtd-theme"] +docs = ["sphinx (>=1.6.5,!=1.8.0,!=3.1.0,!=3.1.1)", "sphinx-rtd-theme"] docstest = ["doc8", "pyenchant (>=1.6.11)", "twine (>=1.12.0)", "sphinxcontrib-spelling (>=4.0.1)"] -idna = ["idna (>=2.1)"] -pep8test = ["flake8", "flake8-import-order", "pep8-naming"] -test = ["pytest (>=3.6.0,<3.9.0 || >3.9.0,<3.9.1 || >3.9.1,<3.9.2 || >3.9.2)", "pretend", "iso8601", "pytz", "hypothesis (>=1.11.4,<3.79.2 || >3.79.2)"] +pep8test = ["black", "flake8", "flake8-import-order", "pep8-naming"] +ssh = ["bcrypt (>=3.1.5)"] +test = ["pytest (>=3.6.0,!=3.9.0,!=3.9.1,!=3.9.2)", "pretend", "iso8601", "pytz", "hypothesis (>=1.11.4,!=3.79.2)"] [[package]] -category = "dev" -description = "Decorators for Humans" name = "decorator" +version = "4.4.2" +description = "Decorators for Humans" +category = "dev" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*" -version = "4.4.2" [[package]] -category = "dev" -description = "Distribution utilities" name = "distlib" +version = "0.3.1" +description = "Distribution utilities" +category = "dev" optional = false python-versions = "*" -version = "0.3.0" [[package]] +name = "docutils" +version = "0.16" +description = "Docutils -- Python Documentation Utilities" category = "dev" -description = "A platform independent file lock." +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + +[[package]] name = "filelock" +version = "3.0.12" +description = "A platform independent file lock." +category = "dev" optional = false python-versions = "*" -version = "3.0.12" [[package]] -category = "dev" -description = "the modular source code checker: pep8 pyflakes and co" name = "flake8" +version = "3.8.4" +description = "the modular source code checker: pep8 pyflakes and co" +category = "dev" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" -version = "3.8.3" [package.dependencies] +importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} mccabe = ">=0.6.0,<0.7.0" pycodestyle = ">=2.6.0a1,<2.7.0" pyflakes = ">=2.2.0,<2.3.0" -[package.dependencies.importlib-metadata] -python = "<3.8" -version = "*" - [[package]] -category = "dev" -description = "Generate HTML reports of flake8 violations" name = "flake8-html" +version = "0.4.1" +description = "Generate HTML reports of flake8 violations" +category = "dev" optional = false python-versions = "*" -version = "0.4.1" [package.dependencies] flake8 = ">=3.3.0" @@ -356,73 +377,81 @@ jinja2 = ">=2.9.0" pygments = ">=2.2.0" [[package]] +name = "furo" +version = "2020.11.15b17" +description = "A clean customisable Sphinx documentation theme." category = "dev" -description = "Clean single-source support for Python 3 and 2" -name = "future" optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" -version = "0.18.2" +python-versions = ">=3.5" + +[package.dependencies] +beautifulsoup4 = "*" +sphinx = ">3.0" + +[package.extras] +doc = ["myst-parser", "sphinx-inline-tabs"] +test = ["pytest", "pytest-cov", "pytest-xdist"] [[package]] +name = "future" +version = "0.18.2" +description = "Clean single-source support for Python 3 and 2" category = "dev" -description = "HTML parser based on the WHATWG HTML specification" -name = "html5lib" optional = false -python-versions = "*" -version = "1.0.1" +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" + +[[package]] +name = "html5lib" +version = "1.1" +description = "HTML parser based on the WHATWG HTML specification" +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" [package.dependencies] six = ">=1.9" webencodings = "*" [package.extras] -all = ["genshi", "chardet (>=2.2)", "datrie", "lxml"] +all = ["genshi", "chardet (>=2.2)", "lxml"] chardet = ["chardet (>=2.2)"] -datrie = ["datrie"] genshi = ["genshi"] lxml = ["lxml"] [[package]] -category = "dev" -description = "File identification library for Python" name = "identify" +version = "1.5.9" +description = "File identification library for Python" +category = "dev" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" -version = "1.4.19" [package.extras] license = ["editdistance"] [[package]] -category = "main" -description = "Internationalized Domain Names in Applications (IDNA)" name = "idna" +version = "2.10" +description = "Internationalized Domain Names in Applications (IDNA)" +category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "2.9" [[package]] +name = "imagesize" +version = "1.2.0" +description = "Getting image size from png/jpeg/jpeg2000/gif file" category = "dev" -description = "Read metadata from Python packages" -name = "importlib-metadata" optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" -version = "1.1.3" - -[package.dependencies] -zipp = ">=0.5" - -[package.extras] -docs = ["sphinx", "rst.linker"] -testing = ["packaging", "importlib-resources"] +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" [[package]] -category = "dev" -description = "Read metadata from Python packages" name = "importlib-metadata" +version = "1.7.0" +description = "Read metadata from Python packages" +category = "dev" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" -version = "1.6.1" [package.dependencies] zipp = ">=0.5" @@ -432,24 +461,23 @@ docs = ["sphinx", "rst.linker"] testing = ["packaging", "pep517", "importlib-resources (>=1.3)"] [[package]] -category = "dev" -description = "IPython: Productive Interactive Computing" name = "ipython" +version = "7.19.0" +description = "IPython: Productive Interactive Computing" +category = "dev" optional = false -python-versions = ">=3.6" -version = "7.15.0" +python-versions = ">=3.7" [package.dependencies] -appnope = "*" +appnope = {version = "*", markers = "sys_platform == \"darwin\""} backcall = "*" -colorama = "*" +colorama = {version = "*", markers = "sys_platform == \"win32\""} decorator = "*" jedi = ">=0.10" -pexpect = "*" +pexpect = {version = ">4.3", markers = "sys_platform != \"win32\""} pickleshare = "*" prompt-toolkit = ">=2.0.0,<3.0.0 || >3.0.0,<3.0.1 || >3.0.1,<3.1.0" pygments = "*" -setuptools = ">=18.5" traitlets = ">=4.2" [package.extras] @@ -464,20 +492,20 @@ qtconsole = ["qtconsole"] test = ["nose (>=0.10.1)", "requests", "testpath", "pygments", "nbformat", "ipykernel", "numpy (>=1.14)"] [[package]] -category = "dev" -description = "Vestigial utilities from IPython" name = "ipython-genutils" +version = "0.2.0" +description = "Vestigial utilities from IPython" +category = "dev" optional = false python-versions = "*" -version = "0.2.0" [[package]] -category = "dev" -description = "A Python utility / library to sort Python imports." name = "isort" +version = "4.3.21" +description = "A Python utility / library to sort Python imports." +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "4.3.21" [package.extras] pipfile = ["pipreqs", "requirementslib"] @@ -486,39 +514,38 @@ requirements = ["pipreqs", "pip-api"] xdg_home = ["appdirs (>=1.4.0)"] [[package]] -category = "dev" -description = "An autocompletion tool for Python that can be used for text editors." name = "jedi" +version = "0.17.2" +description = "An autocompletion tool for Python that can be used for text editors." +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -version = "0.17.0" [package.dependencies] -parso = ">=0.7.0" +parso = ">=0.7.0,<0.8.0" [package.extras] -qa = ["flake8 (3.7.9)"] -testing = ["colorama", "docopt", "pytest (>=3.9.0,<5.0.0)"] +qa = ["flake8 (==3.7.9)"] +testing = ["Django (<3.1)", "colorama", "docopt", "pytest (>=3.9.0,<5.0.0)"] [[package]] -category = "dev" -description = "Low-level, pure Python DBus protocol wrapper." -marker = "python_version >= \"3.5\" and python_version < \"4.0\" and sys_platform == \"linux\"" name = "jeepney" +version = "0.5.0" +description = "Low-level, pure Python DBus protocol wrapper." +category = "dev" optional = false -python-versions = ">=3.5" -version = "0.4.3" +python-versions = ">=3.6" [package.extras] -dev = ["testpath"] +test = ["pytest", "pytest-trio", "pytest-asyncio", "testpath", "trio"] [[package]] -category = "dev" -description = "A very fast and expressive template engine." name = "jinja2" +version = "2.11.2" +description = "A very fast and expressive template engine." +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -version = "2.11.2" [package.dependencies] MarkupSafe = ">=0.23" @@ -527,107 +554,74 @@ MarkupSafe = ">=0.23" i18n = ["Babel (>=0.8)"] [[package]] -category = "dev" -description = "Lightweight pipelining: using Python functions as pipeline jobs." -marker = "python_version > \"2.7\"" name = "joblib" +version = "0.17.0" +description = "Lightweight pipelining: using Python functions as pipeline jobs." +category = "dev" optional = false python-versions = ">=3.6" -version = "0.15.1" [[package]] -category = "dev" -description = "An implementation of JSON Schema validation for Python" -name = "jsonschema" -optional = false -python-versions = "*" -version = "3.2.0" - -[package.dependencies] -attrs = ">=17.4.0" -pyrsistent = ">=0.14.0" -setuptools = "*" -six = ">=1.11.0" - -[package.dependencies.importlib-metadata] -python = "<3.8" -version = "*" - -[package.extras] -format = ["idna", "jsonpointer (>1.13)", "rfc3987", "strict-rfc3339", "webcolors"] -format_nongpl = ["idna", "jsonpointer (>1.13)", "webcolors", "rfc3986-validator (>0.1.0)", "rfc3339-validator"] - -[[package]] -category = "dev" -description = "Store and access your passwords safely." -marker = "python_version >= \"3.5\" and python_version < \"4.0\"" name = "keyring" +version = "21.5.0" +description = "Store and access your passwords safely." +category = "dev" optional = false -python-versions = ">=3.5" -version = "20.0.1" +python-versions = ">=3.6" [package.dependencies] -pywin32-ctypes = "<0.1.0 || >0.1.0,<0.1.1 || >0.1.1" -secretstorage = "*" - -[package.dependencies.importlib-metadata] -python = "<3.8" -version = "*" +importlib-metadata = {version = ">=1", markers = "python_version < \"3.8\""} +jeepney = {version = ">=0.4.2", markers = "sys_platform == \"linux\""} +pywin32-ctypes = {version = "<0.1.0 || >0.1.0,<0.1.1 || >0.1.1", markers = "sys_platform == \"win32\""} +SecretStorage = {version = ">=3.2", markers = "sys_platform == \"linux\""} [package.extras] docs = ["sphinx", "jaraco.packaging (>=3.2)", "rst.linker (>=1.9)"] -testing = ["pytest (>=3.5,<3.7.3 || >3.7.3)", "pytest-checkdocs (>=1.2.3)", "pytest-flake8", "pytest-black-multipy", "pytest-cov"] +testing = ["pytest (>=3.5,!=3.7.3)", "pytest-checkdocs (>=1.2.3)", "pytest-flake8", "pytest-cov", "jaraco.test (>=3.2.0)", "pytest-black (>=0.3.7)", "pytest-mypy"] [[package]] -category = "dev" -description = "Python LiveReload is an awesome tool for web developers" name = "livereload" +version = "2.6.3" +description = "Python LiveReload is an awesome tool for web developers" +category = "dev" optional = false python-versions = "*" -version = "2.6.2" [package.dependencies] six = "*" - -[package.dependencies.tornado] -python = ">=2.8" -version = "*" +tornado = {version = "*", markers = "python_version > \"2.7\""} [[package]] -category = "dev" -description = "Platform-independent file locking module" name = "lockfile" +version = "0.12.2" +description = "Platform-independent file locking module" +category = "dev" optional = false python-versions = "*" -version = "0.12.2" [[package]] -category = "dev" -description = "A Python implementation of Lunr.js" name = "lunr" +version = "0.5.8" +description = "A Python implementation of Lunr.js" +category = "dev" optional = false python-versions = "*" -version = "0.5.8" [package.dependencies] future = ">=0.16.0" +nltk = {version = ">=3.2.5", optional = true, markers = "python_version > \"2.7\" and extra == \"languages\""} six = ">=1.11.0" -[package.dependencies.nltk] -optional = true -python = ">=2.8" -version = ">=3.2.5" - [package.extras] languages = ["nltk (>=3.2.5,<3.5)", "nltk (>=3.2.5)"] [[package]] -category = "dev" -description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API." name = "lxml" +version = "4.6.1" +description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API." +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, != 3.4.*" -version = "4.5.1" [package.extras] cssselect = ["cssselect (>=0.7)"] @@ -636,121 +630,116 @@ htmlsoup = ["beautifulsoup4"] source = ["Cython (>=0.29.7)"] [[package]] -category = "dev" -description = "Python implementation of Markdown." name = "markdown" +version = "3.3.3" +description = "Python implementation of Markdown." +category = "dev" optional = false -python-versions = ">=3.5" -version = "3.2.2" +python-versions = ">=3.6" [package.dependencies] -[package.dependencies.importlib-metadata] -python = "<3.8" -version = "*" +importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} [package.extras] testing = ["coverage", "pyyaml"] [[package]] -category = "dev" -description = "This is an extension to Python-Markdown which provides an \"include\" function, similar to that found in LaTeX (and also the C pre-processor and Fortran). I originally wrote it for my FORD Fortran auto-documentation generator." name = "markdown-include" +version = "0.5.1" +description = "This is an extension to Python-Markdown which provides an \"include\" function, similar to that found in LaTeX (and also the C pre-processor and Fortran). I originally wrote it for my FORD Fortran auto-documentation generator." +category = "dev" optional = false python-versions = "*" -version = "0.5.1" [package.dependencies] markdown = "*" [[package]] -category = "dev" -description = "Safely add untrusted strings to HTML/XML markup." name = "markupsafe" +version = "1.1.1" +description = "Safely add untrusted strings to HTML/XML markup." +category = "dev" optional = false python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*" -version = "1.1.1" [[package]] -category = "dev" -description = "McCabe checker, plugin for flake8" name = "mccabe" +version = "0.6.1" +description = "McCabe checker, plugin for flake8" +category = "dev" optional = false python-versions = "*" -version = "0.6.1" [[package]] -category = "dev" -description = "AutoDoc for MarkDown" name = "mkautodoc" +version = "0.1.0" +description = "AutoDoc for MarkDown" +category = "dev" optional = false python-versions = ">=3.6" -version = "0.1.0" [[package]] -category = "dev" -description = "Project documentation with Markdown." name = "mkdocs" +version = "1.1.2" +description = "Project documentation with Markdown." +category = "dev" optional = false python-versions = ">=3.5" -version = "1.1.2" [package.dependencies] +click = ">=3.3" Jinja2 = ">=2.10.1" +livereload = ">=2.5.1" +lunr = {version = "0.5.8", extras = ["languages"]} Markdown = ">=3.2.1" PyYAML = ">=3.10" -click = ">=3.3" -livereload = ">=2.5.1" tornado = ">=5.0" -[package.dependencies.lunr] -extras = ["languages"] -version = "0.5.8" - [[package]] -category = "dev" -description = "A Material Design theme for MkDocs" name = "mkdocs-material" +version = "4.6.3" +description = "A Material Design theme for MkDocs" +category = "dev" optional = false python-versions = "*" -version = "4.6.3" [package.dependencies] -Pygments = ">=2.4" markdown = ">=3.2" mkdocs = ">=1.0" +Pygments = ">=2.4" pymdown-extensions = ">=6.3" [[package]] -category = "dev" -description = "More routines for operating on iterables, beyond itertools" name = "more-itertools" +version = "8.6.0" +description = "More routines for operating on iterables, beyond itertools" +category = "dev" optional = false python-versions = ">=3.5" -version = "8.4.0" [[package]] -category = "dev" -description = "MessagePack (de)serializer." name = "msgpack" +version = "1.0.0" +description = "MessagePack (de)serializer." +category = "dev" optional = false python-versions = "*" -version = "1.0.0" [[package]] -category = "main" -description = "multidict implementation" name = "multidict" +version = "5.0.2" +description = "multidict implementation" +category = "main" optional = false python-versions = ">=3.5" -version = "4.7.6" [[package]] -category = "dev" -description = "Optional static typing for Python" name = "mypy" +version = "0.770" +description = "Optional static typing for Python" +category = "dev" optional = false python-versions = ">=3.5" -version = "0.770" [package.dependencies] mypy-extensions = ">=0.4.3,<0.5.0" @@ -761,21 +750,20 @@ typing-extensions = ">=3.7.4" dmypy = ["psutil (>=4.0)"] [[package]] -category = "dev" -description = "Experimental type system extensions for programs checked with the mypy typechecker." name = "mypy-extensions" +version = "0.4.3" +description = "Experimental type system extensions for programs checked with the mypy typechecker." +category = "dev" optional = false python-versions = "*" -version = "0.4.3" [[package]] -category = "dev" -description = "Natural Language Toolkit" -marker = "python_version > \"2.7\"" name = "nltk" +version = "3.5" +description = "Natural Language Toolkit" +category = "dev" optional = false python-versions = "*" -version = "3.5" [package.dependencies] click = "*" @@ -792,204 +780,201 @@ tgrep = ["pyparsing"] twitter = ["twython"] [[package]] -category = "dev" -description = "Node.js virtual environment builder" name = "nodeenv" +version = "1.5.0" +description = "Node.js virtual environment builder" +category = "dev" optional = false python-versions = "*" -version = "1.4.0" [[package]] -category = "dev" -description = "Core utilities for Python packages" name = "packaging" +version = "20.4" +description = "Core utilities for Python packages" +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "20.4" [package.dependencies] pyparsing = ">=2.0.2" six = "*" [[package]] -category = "dev" -description = "A Python Parser" name = "parso" +version = "0.7.1" +description = "A Python Parser" +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "0.7.0" [package.extras] testing = ["docopt", "pytest (>=3.0.7)"] [[package]] -category = "dev" -description = "Bring colors to your terminal." name = "pastel" +version = "0.2.1" +description = "Bring colors to your terminal." +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "0.2.0" [[package]] -category = "dev" -description = "Utility library for gitignore style pattern matching of file paths." name = "pathspec" +version = "0.8.1" +description = "Utility library for gitignore style pattern matching of file paths." +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -version = "0.8.0" [[package]] -category = "dev" -description = "Pexpect allows easy control of interactive console applications." name = "pexpect" +version = "4.8.0" +description = "Pexpect allows easy control of interactive console applications." +category = "dev" optional = false python-versions = "*" -version = "4.8.0" [package.dependencies] ptyprocess = ">=0.5" [[package]] -category = "dev" -description = "Tiny 'shelve'-like database with concurrency support" name = "pickleshare" +version = "0.7.5" +description = "Tiny 'shelve'-like database with concurrency support" +category = "dev" optional = false python-versions = "*" -version = "0.7.5" [[package]] -category = "dev" -description = "Query metadatdata from sdists / bdists / installed packages." name = "pkginfo" +version = "1.6.1" +description = "Query metadatdata from sdists / bdists / installed packages." +category = "dev" optional = false python-versions = "*" -version = "1.5.0.1" [package.extras] testing = ["nose", "coverage"] [[package]] -category = "dev" -description = "plugin and hook calling mechanisms for python" name = "pluggy" +version = "0.13.1" +description = "plugin and hook calling mechanisms for python" +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "0.13.1" [package.dependencies] -[package.dependencies.importlib-metadata] -python = "<3.8" -version = ">=0.12" +importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} [package.extras] dev = ["pre-commit", "tox"] [[package]] -category = "dev" -description = "Python dependency management and packaging made easy." name = "poetry" +version = "1.1.4" +description = "Python dependency management and packaging made easy." +category = "dev" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "1.0.9" +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" [package.dependencies] +cachecontrol = {version = ">=0.12.4,<0.13.0", extras = ["filecache"]} cachy = ">=0.3.0,<0.4.0" -cleo = ">=0.7.6,<0.8.0" -clikit = ">=0.4.2,<0.5.0" +cleo = ">=0.8.1,<0.9.0" +clikit = ">=0.6.2,<0.7.0" +crashtest = {version = ">=0.3.0,<0.4.0", markers = "python_version >= \"3.6\" and python_version < \"4.0\""} html5lib = ">=1.0,<2.0" -jsonschema = ">=3.1,<4.0" +importlib-metadata = {version = ">=1.6.0,<2.0.0", markers = "python_version < \"3.8\""} +keyring = {version = ">=21.2.0,<22.0.0", markers = "python_version >= \"3.6\" and python_version < \"4.0\""} +packaging = ">=20.4,<21.0" pexpect = ">=4.7.0,<5.0.0" pkginfo = ">=1.4,<2.0" -pyparsing = ">=2.2,<3.0" -pyrsistent = ">=0.14.2,<0.15.0" +poetry-core = ">=1.0.0,<2.0.0" requests = ">=2.18,<3.0" -requests-toolbelt = ">=0.8.0,<0.9.0" +requests-toolbelt = ">=0.9.1,<0.10.0" shellingham = ">=1.1,<2.0" -tomlkit = ">=0.5.11,<0.6.0" - -[package.dependencies.cachecontrol] -extras = ["filecache"] -version = ">=0.12.4,<0.13.0" - -[package.dependencies.importlib-metadata] -python = "<3.8" -version = ">=1.1.3,<1.2.0" - -[package.dependencies.keyring] -python = ">=3.5,<4.0" -version = ">=20.0.1,<21.0.0" +tomlkit = ">=0.7.0,<1.0.0" +virtualenv = ">=20.0.26,<21.0.0" [[package]] +name = "poetry-core" +version = "1.0.0" +description = "Poetry PEP 517 Build Backend" category = "dev" -description = "A framework for managing and maintaining multi-language pre-commit hooks." +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + +[package.dependencies] +importlib-metadata = {version = ">=1.7.0,<2.0.0", markers = "python_version >= \"2.7\" and python_version < \"2.8\" or python_version >= \"3.5\" and python_version < \"3.8\""} + +[[package]] name = "pre-commit" +version = "2.8.2" +description = "A framework for managing and maintaining multi-language pre-commit hooks." +category = "dev" optional = false python-versions = ">=3.6.1" -version = "2.5.1" [package.dependencies] cfgv = ">=2.0.0" identify = ">=1.0.0" +importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} nodeenv = ">=0.11.1" pyyaml = ">=5.1" toml = "*" virtualenv = ">=20.0.8" -[package.dependencies.importlib-metadata] -python = "<3.8" -version = "*" - [[package]] -category = "dev" -description = "Library for building powerful interactive command lines in Python" name = "prompt-toolkit" +version = "3.0.8" +description = "Library for building powerful interactive command lines in Python" +category = "dev" optional = false python-versions = ">=3.6.1" -version = "3.0.5" [package.dependencies] wcwidth = "*" [[package]] -category = "dev" -description = "Run a subprocess in a pseudo terminal" name = "ptyprocess" +version = "0.6.0" +description = "Run a subprocess in a pseudo terminal" +category = "dev" optional = false python-versions = "*" -version = "0.6.0" [[package]] -category = "dev" -description = "library with cross-python path, ini-parsing, io, code, log facilities" name = "py" +version = "1.9.0" +description = "library with cross-python path, ini-parsing, io, code, log facilities" +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "1.8.1" [[package]] -category = "dev" -description = "Python style guide checker" name = "pycodestyle" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" version = "2.6.0" - -[[package]] +description = "Python style guide checker" +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + +[[package]] +name = "pycparser" +version = "2.20" +description = "C parser in Python" category = "dev" -description = "C parser in Python" -marker = "python_version >= \"3.5\" and python_version < \"4.0\" and sys_platform == \"linux\"" -name = "pycparser" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "2.20" [[package]] -category = "main" -description = "Data validation and settings management using python 3.6 type hinting" name = "pydantic" +version = "1.7.2" +description = "Data validation and settings management using python 3.6 type hinting" +category = "main" optional = false python-versions = ">=3.6" -version = "1.5.1" [package.extras] dotenv = ["python-dotenv (>=0.10.4)"] @@ -997,92 +982,78 @@ email = ["email-validator (>=1.0.3)"] typing_extensions = ["typing-extensions (>=3.7.2)"] [[package]] -category = "dev" -description = "passive checker of Python programs" name = "pyflakes" +version = "2.2.0" +description = "passive checker of Python programs" +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "2.2.0" [[package]] -category = "dev" -description = "Pygments is a syntax highlighting package written in Python." name = "pygments" +version = "2.7.2" +description = "Pygments is a syntax highlighting package written in Python." +category = "dev" optional = false python-versions = ">=3.5" -version = "2.6.1" [[package]] -category = "dev" -description = "A pure Python Levenshtein implementation that's not freaking GPL'd." name = "pylev" +version = "1.3.0" +description = "A pure Python Levenshtein implementation that's not freaking GPL'd." +category = "dev" optional = false python-versions = "*" -version = "1.3.0" [[package]] -category = "dev" -description = "Extension pack for Python Markdown." name = "pymdown-extensions" +version = "6.3" +description = "Extension pack for Python Markdown." +category = "dev" optional = false python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*" -version = "6.3" [package.dependencies] Markdown = ">=3.2" [[package]] -category = "dev" -description = "Python parsing module" name = "pyparsing" +version = "2.4.7" +description = "Python parsing module" +category = "dev" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" -version = "2.4.7" [[package]] -category = "dev" -description = "Persistent/Functional/Immutable data structures" -name = "pyrsistent" -optional = false -python-versions = "*" -version = "0.14.11" - -[package.dependencies] -six = "*" - -[[package]] -category = "dev" -description = "pytest: simple powerful testing with Python" name = "pytest" +version = "5.4.3" +description = "pytest: simple powerful testing with Python" +category = "dev" optional = false python-versions = ">=3.5" -version = "5.4.3" [package.dependencies] -atomicwrites = ">=1.0" +atomicwrites = {version = ">=1.0", markers = "sys_platform == \"win32\""} attrs = ">=17.4.0" -colorama = "*" +colorama = {version = "*", markers = "sys_platform == \"win32\""} +importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} more-itertools = ">=4.0.0" packaging = "*" pluggy = ">=0.12,<1.0" py = ">=1.5.0" wcwidth = "*" -[package.dependencies.importlib-metadata] -python = "<3.8" -version = ">=0.12" - [package.extras] -checkqa-mypy = ["mypy (v0.761)"] +checkqa-mypy = ["mypy (==v0.761)"] testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "requests", "xmlschema"] [[package]] -category = "dev" -description = "Pytest support for asyncio." name = "pytest-asyncio" +version = "0.10.0" +description = "Pytest support for asyncio." +category = "dev" optional = false python-versions = ">= 3.5" -version = "0.10.0" [package.dependencies] pytest = ">=3.0.6" @@ -1091,50 +1062,50 @@ pytest = ">=3.0.6" testing = ["async-generator (>=1.3)", "coverage", "hypothesis (>=3.64)"] [[package]] -category = "dev" -description = "Pytest plugin for measuring coverage." name = "pytest-cov" +version = "2.10.1" +description = "Pytest plugin for measuring coverage." +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -version = "2.10.0" [package.dependencies] coverage = ">=4.4" pytest = ">=4.6" [package.extras] -testing = ["fields", "hunter", "process-tests (2.0.2)", "six", "pytest-xdist", "virtualenv"] +testing = ["fields", "hunter", "process-tests (==2.0.2)", "six", "pytest-xdist", "virtualenv"] [[package]] -category = "dev" -description = "pytest plugin for generating HTML reports" name = "pytest-html" +version = "2.1.1" +description = "pytest plugin for generating HTML reports" +category = "dev" optional = false python-versions = ">=3.6" -version = "2.1.1" [package.dependencies] pytest = ">=5.0" pytest-metadata = "*" [[package]] -category = "dev" -description = "pytest plugin for test session metadata" name = "pytest-metadata" +version = "1.10.0" +description = "pytest plugin for test session metadata" +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" -version = "1.9.0" [package.dependencies] pytest = ">=2.9.0" [[package]] -category = "dev" -description = "Thin-wrapper around the mock package for easier use with py.test" name = "pytest-mock" +version = "2.0.0" +description = "Thin-wrapper around the mock package for easier use with py.test" +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "2.0.0" [package.dependencies] pytest = ">=2.7" @@ -1143,276 +1114,427 @@ pytest = ">=2.7" dev = ["pre-commit", "tox"] [[package]] -category = "dev" -description = "Mypy static type checker plugin for Pytest" name = "pytest-mypy" +version = "0.4.2" +description = "Mypy static type checker plugin for Pytest" +category = "dev" optional = false python-versions = "~=3.4" -version = "0.4.2" [package.dependencies] -[[package.dependencies.mypy]] -python = ">=3.5,<3.8" -version = ">=0.500" - -[[package.dependencies.mypy]] -python = ">=3.8" -version = ">=0.700" - -[package.dependencies.pytest] -python = ">=3.5" -version = ">=2.8" +mypy = [ + {version = ">=0.500", markers = "python_version >= \"3.5\" and python_version < \"3.8\""}, + {version = ">=0.700", markers = "python_version >= \"3.8\""}, +] +pytest = {version = ">=2.8", markers = "python_version >= \"3.5\""} [[package]] -category = "main" -description = "World timezone definitions, modern and historical" name = "pytz" +version = "2020.4" +description = "World timezone definitions, modern and historical" +category = "main" optional = false python-versions = "*" -version = "2020.1" [[package]] -category = "dev" -description = "" -marker = "python_version >= \"3.5\" and python_version < \"4.0\" and sys_platform == \"win32\"" name = "pywin32-ctypes" -optional = false -python-versions = "*" version = "0.2.0" - -[[package]] +description = "" category = "dev" -description = "YAML parser and emitter for Python" -name = "pyyaml" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -version = "5.3.1" - -[[package]] -category = "dev" -description = "Alternative regular expression module, to replace re." -name = "regex" optional = false python-versions = "*" -version = "2020.6.8" [[package]] +name = "pyyaml" +version = "5.3.1" +description = "YAML parser and emitter for Python" +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + +[[package]] +name = "regex" +version = "2020.11.13" +description = "Alternative regular expression module, to replace re." +category = "dev" +optional = false +python-versions = "*" + +[[package]] +name = "requests" +version = "2.25.0" +description = "Python HTTP for Humans." category = "dev" -description = "Python HTTP for Humans." -name = "requests" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -version = "2.23.0" [package.dependencies] certifi = ">=2017.4.17" chardet = ">=3.0.2,<4" idna = ">=2.5,<3" -urllib3 = ">=1.21.1,<1.25.0 || >1.25.0,<1.25.1 || >1.25.1,<1.26" +urllib3 = ">=1.21.1,<1.27" [package.extras] security = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)"] -socks = ["PySocks (>=1.5.6,<1.5.7 || >1.5.7)", "win-inet-pton"] +socks = ["PySocks (>=1.5.6,!=1.5.7)", "win-inet-pton"] [[package]] -category = "dev" -description = "A utility belt for advanced users of python-requests" name = "requests-toolbelt" +version = "0.9.1" +description = "A utility belt for advanced users of python-requests" +category = "dev" optional = false python-versions = "*" -version = "0.8.0" [package.dependencies] requests = ">=2.0.1,<3.0.0" [[package]] -category = "dev" -description = "Python bindings to FreeDesktop.org Secret Service API" -marker = "python_version >= \"3.5\" and python_version < \"4.0\" and sys_platform == \"linux\"" name = "secretstorage" +version = "3.2.0" +description = "Python bindings to FreeDesktop.org Secret Service API" +category = "dev" optional = false python-versions = ">=3.5" -version = "3.1.2" [package.dependencies] -cryptography = "*" +cryptography = ">=2.0" jeepney = ">=0.4.2" [[package]] -category = "dev" -description = "Tool to Detect Surrounding Shell" name = "shellingham" +version = "1.3.2" +description = "Tool to Detect Surrounding Shell" +category = "dev" optional = false python-versions = "!=3.0,!=3.1,!=3.2,!=3.3,>=2.6" -version = "1.3.2" [[package]] -category = "dev" -description = "Python 2 and 3 compatibility utilities" name = "six" +version = "1.15.0" +description = "Python 2 and 3 compatibility utilities" +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" -version = "1.15.0" [[package]] +name = "snowballstemmer" +version = "2.0.0" +description = "This package provides 26 stemmers for 25 languages generated from Snowball algorithms." category = "dev" -description = "Python Library for Tom's Obvious, Minimal Language" -name = "toml" optional = false python-versions = "*" -version = "0.10.1" [[package]] +name = "soupsieve" +version = "2.0.1" +description = "A modern CSS selector implementation for Beautiful Soup." category = "dev" -description = "Style preserving TOML library" -name = "tomlkit" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "0.5.11" +python-versions = ">=3.5" [[package]] +name = "sphinx" +version = "3.3.1" +description = "Python documentation generator" category = "dev" -description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." -name = "tornado" optional = false -python-versions = ">= 3.5" -version = "6.0.4" - -[[package]] -category = "dev" -description = "Fast, Extensible Progress Meter" -marker = "python_version > \"2.7\"" -name = "tqdm" -optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*" -version = "4.46.1" - -[package.extras] -dev = ["py-make (>=0.1.0)", "twine", "argopt", "pydoc-markdown"] - -[[package]] -category = "dev" -description = "Traitlets Python config system" -name = "traitlets" -optional = false -python-versions = "*" -version = "4.3.3" +python-versions = ">=3.5" [package.dependencies] -decorator = "*" -ipython-genutils = "*" -six = "*" +alabaster = ">=0.7,<0.8" +babel = ">=1.3" +colorama = {version = ">=0.3.5", markers = "sys_platform == \"win32\""} +docutils = ">=0.12" +imagesize = "*" +Jinja2 = ">=2.3" +packaging = "*" +Pygments = ">=2.0" +requests = ">=2.5.0" +snowballstemmer = ">=1.1" +sphinxcontrib-applehelp = "*" +sphinxcontrib-devhelp = "*" +sphinxcontrib-htmlhelp = "*" +sphinxcontrib-jsmath = "*" +sphinxcontrib-qthelp = "*" +sphinxcontrib-serializinghtml = "*" + +[package.extras] +docs = ["sphinxcontrib-websupport"] +lint = ["flake8 (>=3.5.0)", "flake8-import-order", "mypy (>=0.790)", "docutils-stubs"] +test = ["pytest", "pytest-cov", "html5lib", "typed-ast", "cython"] + +[[package]] +name = "sphinx-autobuild" +version = "2020.9.1" +description = "Rebuild Sphinx documentation on changes, with live-reload in the browser." +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +livereload = "*" +sphinx = "*" + +[package.extras] +test = ["pytest", "pytest-cov"] + +[[package]] +name = "sphinx-copybutton" +version = "0.3.1" +description = "Add a copy button to each of your code cells." +category = "dev" +optional = false +python-versions = "*" + +[package.dependencies] +sphinx = ">=1.8" + +[package.extras] +code_style = ["flake8 (>=3.7.0,<3.8.0)", "black", "pre-commit (==1.17.0)"] + +[[package]] +name = "sphinx-intl" +version = "2.0.1" +description = "Sphinx utility that make it easy to translate and to apply translation." +category = "dev" +optional = false +python-versions = ">=3.5" + +[package.dependencies] +babel = "*" +click = "*" +sphinx = "*" [package.extras] test = ["pytest", "mock"] +transifex = ["transifex_client (>=0.11)"] [[package]] +name = "sphinxcontrib-applehelp" +version = "1.0.2" +description = "sphinxcontrib-applehelp is a sphinx extension which outputs Apple help books" category = "dev" -description = "a fork of Python 2 and 3 ast modules with type comment support" +optional = false +python-versions = ">=3.5" + +[package.extras] +lint = ["flake8", "mypy", "docutils-stubs"] +test = ["pytest"] + +[[package]] +name = "sphinxcontrib-devhelp" +version = "1.0.2" +description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp document." +category = "dev" +optional = false +python-versions = ">=3.5" + +[package.extras] +lint = ["flake8", "mypy", "docutils-stubs"] +test = ["pytest"] + +[[package]] +name = "sphinxcontrib-htmlhelp" +version = "1.0.3" +description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files" +category = "dev" +optional = false +python-versions = ">=3.5" + +[package.extras] +lint = ["flake8", "mypy", "docutils-stubs"] +test = ["pytest", "html5lib"] + +[[package]] +name = "sphinxcontrib-jsmath" +version = "1.0.1" +description = "A sphinx extension which renders display math in HTML via JavaScript" +category = "dev" +optional = false +python-versions = ">=3.5" + +[package.extras] +test = ["pytest", "flake8", "mypy"] + +[[package]] +name = "sphinxcontrib-qthelp" +version = "1.0.3" +description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp document." +category = "dev" +optional = false +python-versions = ">=3.5" + +[package.extras] +lint = ["flake8", "mypy", "docutils-stubs"] +test = ["pytest"] + +[[package]] +name = "sphinxcontrib-serializinghtml" +version = "1.1.4" +description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)." +category = "dev" +optional = false +python-versions = ">=3.5" + +[package.extras] +lint = ["flake8", "mypy", "docutils-stubs"] +test = ["pytest"] + +[[package]] +name = "toml" +version = "0.10.2" +description = "Python Library for Tom's Obvious, Minimal Language" +category = "dev" +optional = false +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" + +[[package]] +name = "tomlkit" +version = "0.7.0" +description = "Style preserving TOML library" +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + +[[package]] +name = "tornado" +version = "6.1" +description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." +category = "dev" +optional = false +python-versions = ">= 3.5" + +[[package]] +name = "tqdm" +version = "4.52.0" +description = "Fast, Extensible Progress Meter" +category = "dev" +optional = false +python-versions = ">=2.6, !=3.0.*, !=3.1.*" + +[package.extras] +dev = ["py-make (>=0.1.0)", "twine", "argopt", "pydoc-markdown", "wheel"] + +[[package]] +name = "traitlets" +version = "5.0.5" +description = "Traitlets Python configuration system" +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +ipython-genutils = "*" + +[package.extras] +test = ["pytest"] + +[[package]] name = "typed-ast" -optional = false -python-versions = "*" version = "1.4.1" - -[[package]] +description = "a fork of Python 2 and 3 ast modules with type comment support" category = "dev" -description = "Backported and Experimental Type Hints for Python 3.5+" -name = "typing-extensions" optional = false python-versions = "*" -version = "3.7.4.2" [[package]] -category = "dev" -description = "HTTP library with thread-safe connection pooling, file post, and more." +name = "typing-extensions" +version = "3.7.4.3" +description = "Backported and Experimental Type Hints for Python 3.5+" +category = "main" +optional = false +python-versions = "*" + +[[package]] name = "urllib3" +version = "1.26.2" +description = "HTTP library with thread-safe connection pooling, file post, and more." +category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4" -version = "1.25.9" [package.extras] brotli = ["brotlipy (>=0.6.0)"] -secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "pyOpenSSL (>=0.14)", "ipaddress"] -socks = ["PySocks (>=1.5.6,<1.5.7 || >1.5.7,<2.0)"] +secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"] +socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] [[package]] -category = "main" -description = "Fast implementation of asyncio event loop on top of libuv" -marker = "sys_platform == \"darwin\" or sys_platform == \"linux\"" name = "uvloop" +version = "0.14.0" +description = "Fast implementation of asyncio event loop on top of libuv" +category = "main" optional = false python-versions = "*" -version = "0.14.0" [[package]] -category = "dev" -description = "Virtual Python Environment builder" name = "virtualenv" +version = "20.1.0" +description = "Virtual Python Environment builder" +category = "dev" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" -version = "20.0.23" [package.dependencies] appdirs = ">=1.4.3,<2" -distlib = ">=0.3.0,<1" +distlib = ">=0.3.1,<1" filelock = ">=3.0.0,<4" +importlib-metadata = {version = ">=0.12,<3", markers = "python_version < \"3.8\""} six = ">=1.9.0,<2" -[package.dependencies.importlib-metadata] -python = "<3.8" -version = ">=0.12,<2" - [package.extras] -docs = ["sphinx (>=3)", "sphinx-argparse (>=0.2.5)", "sphinx-rtd-theme (>=0.4.3)", "towncrier (>=19.9.0rc1)", "proselint (>=0.10.2)"] -testing = ["pytest (>=4)", "coverage (>=5)", "coverage-enable-subprocess (>=1)", "pytest-xdist (>=1.31.0)", "pytest-mock (>=2)", "pytest-env (>=0.6.2)", "pytest-randomly (>=1)", "pytest-timeout (>=1)", "flaky (>=3)", "packaging (>=20.0)", "xonsh (>=0.9.16)"] +docs = ["proselint (>=0.10.2)", "sphinx (>=3)", "sphinx-argparse (>=0.2.5)", "sphinx-rtd-theme (>=0.4.3)", "towncrier (>=19.9.0rc1)"] +testing = ["coverage (>=4)", "coverage-enable-subprocess (>=1)", "flaky (>=3)", "pytest (>=4)", "pytest-env (>=0.6.2)", "pytest-freezegun (>=0.4.1)", "pytest-mock (>=2)", "pytest-randomly (>=1)", "pytest-timeout (>=1)", "pytest-xdist (>=1.31.0)", "packaging (>=20.0)", "xonsh (>=0.9.16)"] [[package]] -category = "dev" -description = "Measures the displayed width of unicode strings in a terminal" name = "wcwidth" -optional = false -python-versions = "*" -version = "0.2.4" - -[[package]] +version = "0.2.5" +description = "Measures the displayed width of unicode strings in a terminal" category = "dev" -description = "Character encoding aliases for legacy web content" -name = "webencodings" optional = false python-versions = "*" -version = "0.5.1" [[package]] -category = "main" -description = "Yet another URL library" -name = "yarl" +name = "webencodings" +version = "0.5.1" +description = "Character encoding aliases for legacy web content" +category = "dev" optional = false -python-versions = ">=3.5" -version = "1.4.2" +python-versions = "*" + +[[package]] +name = "yarl" +version = "1.6.3" +description = "Yet another URL library" +category = "main" +optional = false +python-versions = ">=3.6" [package.dependencies] idna = ">=2.0" multidict = ">=4.0" +typing-extensions = {version = ">=3.7.4", markers = "python_version < \"3.8\""} [[package]] -category = "dev" -description = "Backport of pathlib-compatible object wrapper for zip files" name = "zipp" +version = "3.4.0" +description = "Backport of pathlib-compatible object wrapper for zip files" +category = "dev" optional = false python-versions = ">=3.6" -version = "3.1.0" [package.extras] docs = ["sphinx", "jaraco.packaging (>=3.2)", "rst.linker (>=1.9)"] -testing = ["jaraco.itertools", "func-timeout"] +testing = ["pytest (>=3.5,!=3.7.3)", "pytest-checkdocs (>=1.2.3)", "pytest-flake8", "pytest-cov", "jaraco.test (>=3.2.0)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"] [extras] fast = ["uvloop"] proxy = ["aiohttp-socks"] [metadata] -content-hash = "152bb9b155a00baadd3c8b9fa21f08af719180bddccb8ad6c3dd6548c3e71e3e" +lock-version = "1.1" python-versions = "^3.7" +content-hash = "120a5f3ff4944cba06ef2756e1d0833d5bd78aed72a5bc59f0e0191ba2bf7e49" [metadata.files] aiofiles = [ @@ -1420,23 +1542,48 @@ aiofiles = [ {file = "aiofiles-0.4.0.tar.gz", hash = "sha256:021ea0ba314a86027c166ecc4b4c07f2d40fc0f4b3a950d1868a0f2571c2bbee"}, ] aiohttp = [ - {file = "aiohttp-3.6.2-cp35-cp35m-macosx_10_13_x86_64.whl", hash = "sha256:1e984191d1ec186881ffaed4581092ba04f7c61582a177b187d3a2f07ed9719e"}, - {file = "aiohttp-3.6.2-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:50aaad128e6ac62e7bf7bd1f0c0a24bc968a0c0590a726d5a955af193544bcec"}, - {file = "aiohttp-3.6.2-cp36-cp36m-macosx_10_13_x86_64.whl", hash = "sha256:65f31b622af739a802ca6fd1a3076fd0ae523f8485c52924a89561ba10c49b48"}, - {file = "aiohttp-3.6.2-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:ae55bac364c405caa23a4f2d6cfecc6a0daada500274ffca4a9230e7129eac59"}, - {file = "aiohttp-3.6.2-cp36-cp36m-win32.whl", hash = "sha256:344c780466b73095a72c616fac5ea9c4665add7fc129f285fbdbca3cccf4612a"}, - {file = "aiohttp-3.6.2-cp36-cp36m-win_amd64.whl", hash = "sha256:4c6efd824d44ae697814a2a85604d8e992b875462c6655da161ff18fd4f29f17"}, - {file = "aiohttp-3.6.2-cp37-cp37m-macosx_10_13_x86_64.whl", hash = "sha256:2f4d1a4fdce595c947162333353d4a44952a724fba9ca3205a3df99a33d1307a"}, - {file = "aiohttp-3.6.2-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:6206a135d072f88da3e71cc501c59d5abffa9d0bb43269a6dcd28d66bfafdbdd"}, - {file = "aiohttp-3.6.2-cp37-cp37m-win32.whl", hash = "sha256:b778ce0c909a2653741cb4b1ac7015b5c130ab9c897611df43ae6a58523cb965"}, - {file = "aiohttp-3.6.2-cp37-cp37m-win_amd64.whl", hash = "sha256:32e5f3b7e511aa850829fbe5aa32eb455e5534eaa4b1ce93231d00e2f76e5654"}, - {file = "aiohttp-3.6.2-py3-none-any.whl", hash = "sha256:460bd4237d2dbecc3b5ed57e122992f60188afe46e7319116da5eb8a9dfedba4"}, - {file = "aiohttp-3.6.2.tar.gz", hash = "sha256:259ab809ff0727d0e834ac5e8a283dc5e3e0ecc30c4d80b3cd17a4139ce1f326"}, + {file = "aiohttp-3.7.2-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:0989ff15834a4503056d103077ec3652f9ea5699835e1ceaee46b91cf59830bf"}, + {file = "aiohttp-3.7.2-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:8fbeeb2296bb9fe16071a674eadade7391be785ae0049610e64b60ead6abcdd7"}, + {file = "aiohttp-3.7.2-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:48104c883099c0e614c5c38f98c1d174a2c68f52f58b2a6e5a07b59df78262ab"}, + {file = "aiohttp-3.7.2-cp36-cp36m-manylinux2014_i686.whl", hash = "sha256:c9a415f4f2764ab6c7d63ee6b86f02a46b4df9bc11b0de7ffef206908b7bf0b4"}, + {file = "aiohttp-3.7.2-cp36-cp36m-manylinux2014_ppc64le.whl", hash = "sha256:7e26712871ebaf55497a60f55483dc5e74326d1fb0bfceab86ebaeaa3a266733"}, + {file = "aiohttp-3.7.2-cp36-cp36m-manylinux2014_s390x.whl", hash = "sha256:8319a55de469d5af3517dfe1f6a77f248f6668c5a552396635ef900f058882ef"}, + {file = "aiohttp-3.7.2-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:2aea79734ac5ceeac1ec22b4af4efb4efd6a5ca3d73d77ec74ed782cf318f238"}, + {file = "aiohttp-3.7.2-cp36-cp36m-win_amd64.whl", hash = "sha256:be9fa3fe94fc95e9bf84e84117a577c892906dd3cb0a95a7ae21e12a84777567"}, + {file = "aiohttp-3.7.2-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:f04dcbf6af1868048a9b4754b1684c669252aa2419aa67266efbcaaead42ced7"}, + {file = "aiohttp-3.7.2-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:2e886611b100c8c93b753b457e645c5e4b8008ec443434d2a480e5a2bb3e6514"}, + {file = "aiohttp-3.7.2-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:cdbb65c361ff790c424365a83a496fc8dd1983689a5fb7c6852a9a3ff1710c61"}, + {file = "aiohttp-3.7.2-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:8a8addd41320637c1445fea0bae1fd9fe4888acc2cd79217ee33e5d1c83cfe01"}, + {file = "aiohttp-3.7.2-cp37-cp37m-manylinux2014_ppc64le.whl", hash = "sha256:b822bf7b764283b5015e3c49b7bb93f37fc03545f4abe26383771c6b1c813436"}, + {file = "aiohttp-3.7.2-cp37-cp37m-manylinux2014_s390x.whl", hash = "sha256:ad5c3559e3cd64f746df43fa498038c91aa14f5d7615941ea5b106e435f3b892"}, + {file = "aiohttp-3.7.2-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:835bd35e14e4f36414e47c195e6645449a0a1c3fd5eeae4b7f22cb4c5e4f503a"}, + {file = "aiohttp-3.7.2-cp37-cp37m-win_amd64.whl", hash = "sha256:11e087c316e933f1f52f3d4a09ce13f15ad966fc43df47f44ca4e8067b6a2e0d"}, + {file = "aiohttp-3.7.2-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:f8c583c31c6e790dc003d9d574e3ed2c5b337947722965096c4d684e4f183570"}, + {file = "aiohttp-3.7.2-cp38-cp38-manylinux1_i686.whl", hash = "sha256:b84cef790cb93cec82a468b7d2447bf16e3056d2237b652e80f57d653b61da88"}, + {file = "aiohttp-3.7.2-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:4afd8002d9238e5e93acf1a8baa38b3ddf1f7f0ebef174374131ff0c6c2d7973"}, + {file = "aiohttp-3.7.2-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:a1f1cc11c9856bfa7f1ca55002c39070bde2a97ce48ef631468e99e2ac8e3fe6"}, + {file = "aiohttp-3.7.2-cp38-cp38-manylinux2014_ppc64le.whl", hash = "sha256:7f1aeb72f14b9254296cdefa029c00d3c4550a26e1059084f2ee10d22086c2d0"}, + {file = "aiohttp-3.7.2-cp38-cp38-manylinux2014_s390x.whl", hash = "sha256:67f8564c534d75c1d613186939cee45a124d7d37e7aece83b17d18af665b0d7a"}, + {file = "aiohttp-3.7.2-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:184ead67248274f0e20b0cd6bb5f25209b2fad56e5373101cc0137c32c825c87"}, + {file = "aiohttp-3.7.2-cp38-cp38-win_amd64.whl", hash = "sha256:6e0d1231a626d07b23f6fe904caa44efb249da4222d8a16ab039fb2348722292"}, + {file = "aiohttp-3.7.2-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:476b1f8216e59a3c2ffb71b8d7e1da60304da19f6000d422bacc371abb0fc43d"}, + {file = "aiohttp-3.7.2-cp39-cp39-manylinux1_i686.whl", hash = "sha256:89c1aa729953b5ac6ca3c82dcbd83e7cdecfa5cf9792c78c154a642e6e29303d"}, + {file = "aiohttp-3.7.2-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:c53f1d2bd48f5f407b534732f5b3c6b800a58e70b53808637848d8a9ee127fe7"}, + {file = "aiohttp-3.7.2-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:06efdb01ab71ec20786b592d510d1d354fbe0b2e4449ee47067b9ca65d45a006"}, + {file = "aiohttp-3.7.2-cp39-cp39-manylinux2014_ppc64le.whl", hash = "sha256:027be45c4b37e21be81d07ae5242361d73eebad1562c033f80032f955f34df82"}, + {file = "aiohttp-3.7.2-cp39-cp39-manylinux2014_s390x.whl", hash = "sha256:1c36b7ef47cfbc150314c2204cd73613d96d6d0982d41c7679b7cdcf43c0e979"}, + {file = "aiohttp-3.7.2-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:c588a0f824dc7158be9eec1ff465d1c868ad69a4dc518cd098cc11e4f7da09d9"}, + {file = "aiohttp-3.7.2-cp39-cp39-win_amd64.whl", hash = "sha256:547b196a7177511da4f475fc81d0bb88a51a8d535c7444bbf2338b6dc82cb996"}, + {file = "aiohttp-3.7.2.tar.gz", hash = "sha256:c6da1af59841e6d43255d386a2c4bfb59c0a3b262bdb24325cc969d211be6070"}, ] aiohttp-socks = [ {file = "aiohttp_socks-0.3.9-py3-none-any.whl", hash = "sha256:ccd483d7677d7ba80b7ccb738a9be27a3ad6dce4b2756509bc71c9d679d96105"}, {file = "aiohttp_socks-0.3.9.tar.gz", hash = "sha256:5e5638d0e472baa441eab7990cf19e034960cc803f259748cc359464ccb3c2d6"}, ] +alabaster = [ + {file = "alabaster-0.7.12-py2.py3-none-any.whl", hash = "sha256:446438bdcca0e05bd45ea2de1668c1d9b032e1a9154c2c259092d77031ddd359"}, + {file = "alabaster-0.7.12.tar.gz", hash = "sha256:a661d72d58e6ea8a57f7a86e37d86716863ee5e92788398526d58b26a4e4dc02"}, +] appdirs = [ {file = "appdirs-1.4.4-py2.py3-none-any.whl", hash = "sha256:a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128"}, {file = "appdirs-1.4.4.tar.gz", hash = "sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41"}, @@ -1465,17 +1612,22 @@ atomicwrites = [ {file = "atomicwrites-1.4.0.tar.gz", hash = "sha256:ae70396ad1a434f9c7046fd2dd196fc04b12f9e91ffb859164193be8b6168a7a"}, ] attrs = [ - {file = "attrs-19.3.0-py2.py3-none-any.whl", hash = "sha256:08a96c641c3a74e44eb59afb61a24f2cb9f4d7188748e76ba4bb5edfa3cb7d1c"}, - {file = "attrs-19.3.0.tar.gz", hash = "sha256:f7b7ce16570fe9965acd6d30101a28f62fb4a7f9e926b3bbc9b61f8b04247e72"}, + {file = "attrs-20.3.0-py2.py3-none-any.whl", hash = "sha256:31b2eced602aa8423c2aea9c76a724617ed67cf9513173fd3a4f03e3a929c7e6"}, + {file = "attrs-20.3.0.tar.gz", hash = "sha256:832aa3cde19744e49938b91fea06d69ecb9e649c93ba974535d08ad92164f700"}, ] babel = [ - {file = "Babel-2.8.0-py2.py3-none-any.whl", hash = "sha256:d670ea0b10f8b723672d3a6abeb87b565b244da220d76b4dba1b66269ec152d4"}, - {file = "Babel-2.8.0.tar.gz", hash = "sha256:1aac2ae2d0d8ea368fa90906567f5c08463d98ade155c0c4bfedd6a0f7160e38"}, + {file = "Babel-2.9.0-py2.py3-none-any.whl", hash = "sha256:9d35c22fcc79893c3ecc85ac4a56cde1ecf3f19c540bba0922308a6c06ca6fa5"}, + {file = "Babel-2.9.0.tar.gz", hash = "sha256:da031ab54472314f210b0adcff1588ee5d1d1d0ba4dbd07b94dba82bde791e05"}, ] backcall = [ {file = "backcall-0.2.0-py2.py3-none-any.whl", hash = "sha256:fbbce6a29f263178a1f7915c1940bde0ec2b2a967566fe1c65c1dfb7422bd255"}, {file = "backcall-0.2.0.tar.gz", hash = "sha256:5cbdbf27be5e7cfadb448baf0aa95508f91f2bbc6c6437cd9cd06e2a4c215e1e"}, ] +beautifulsoup4 = [ + {file = "beautifulsoup4-4.9.3-py2-none-any.whl", hash = "sha256:4c98143716ef1cb40bf7f39a8e3eec8f8b009509e74904ba3a7b315431577e35"}, + {file = "beautifulsoup4-4.9.3-py3-none-any.whl", hash = "sha256:fff47e031e34ec82bf17e00da8f592fe7de69aeea38be00523c04623c04fb666"}, + {file = "beautifulsoup4-4.9.3.tar.gz", hash = "sha256:84729e322ad1d5b4d25f805bfa05b902dd96450f43842c4e99067d5e1369eb25"}, +] black = [ {file = "black-19.10b0-py36-none-any.whl", hash = "sha256:1b30e59be925fafc1ee4565e5e08abef6b03fe455102883820fe5ee2e4734e0b"}, {file = "black-19.10b0.tar.gz", hash = "sha256:c2edb73a08e9e0e6f65a0e6af18b059b8b1cdd5bef997d7a0b181df93dc81539"}, @@ -1489,160 +1641,189 @@ cachy = [ {file = "cachy-0.3.0.tar.gz", hash = "sha256:186581f4ceb42a0bbe040c407da73c14092379b1e4c0e327fdb72ae4a9b269b1"}, ] certifi = [ - {file = "certifi-2020.4.5.2-py2.py3-none-any.whl", hash = "sha256:9cd41137dc19af6a5e03b630eefe7d1f458d964d406342dd3edf625839b944cc"}, - {file = "certifi-2020.4.5.2.tar.gz", hash = "sha256:5ad7e9a056d25ffa5082862e36f119f7f7cec6457fa07ee2f8c339814b80c9b1"}, + {file = "certifi-2020.11.8-py2.py3-none-any.whl", hash = "sha256:1f422849db327d534e3d0c5f02a263458c3955ec0aae4ff09b95f195c59f4edd"}, + {file = "certifi-2020.11.8.tar.gz", hash = "sha256:f05def092c44fbf25834a51509ef6e631dc19765ab8a57b4e7ab85531f0a9cf4"}, ] cffi = [ - {file = "cffi-1.14.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:1cae98a7054b5c9391eb3249b86e0e99ab1e02bb0cc0575da191aedadbdf4384"}, - {file = "cffi-1.14.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:cf16e3cf6c0a5fdd9bc10c21687e19d29ad1fe863372b5543deaec1039581a30"}, - {file = "cffi-1.14.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:f2b0fa0c01d8a0c7483afd9f31d7ecf2d71760ca24499c8697aeb5ca37dc090c"}, - {file = "cffi-1.14.0-cp27-cp27m-win32.whl", hash = "sha256:99f748a7e71ff382613b4e1acc0ac83bf7ad167fb3802e35e90d9763daba4d78"}, - {file = "cffi-1.14.0-cp27-cp27m-win_amd64.whl", hash = "sha256:c420917b188a5582a56d8b93bdd8e0f6eca08c84ff623a4c16e809152cd35793"}, - {file = "cffi-1.14.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:399aed636c7d3749bbed55bc907c3288cb43c65c4389964ad5ff849b6370603e"}, - {file = "cffi-1.14.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:cab50b8c2250b46fe738c77dbd25ce017d5e6fb35d3407606e7a4180656a5a6a"}, - {file = "cffi-1.14.0-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:001bf3242a1bb04d985d63e138230802c6c8d4db3668fb545fb5005ddf5bb5ff"}, - {file = "cffi-1.14.0-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:e56c744aa6ff427a607763346e4170629caf7e48ead6921745986db3692f987f"}, - {file = "cffi-1.14.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:b8c78301cefcf5fd914aad35d3c04c2b21ce8629b5e4f4e45ae6812e461910fa"}, - {file = "cffi-1.14.0-cp35-cp35m-win32.whl", hash = "sha256:8c0ffc886aea5df6a1762d0019e9cb05f825d0eec1f520c51be9d198701daee5"}, - {file = "cffi-1.14.0-cp35-cp35m-win_amd64.whl", hash = "sha256:8a6c688fefb4e1cd56feb6c511984a6c4f7ec7d2a1ff31a10254f3c817054ae4"}, - {file = "cffi-1.14.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:95cd16d3dee553f882540c1ffe331d085c9e629499ceadfbda4d4fde635f4b7d"}, - {file = "cffi-1.14.0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:66e41db66b47d0d8672d8ed2708ba91b2f2524ece3dee48b5dfb36be8c2f21dc"}, - {file = "cffi-1.14.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:028a579fc9aed3af38f4892bdcc7390508adabc30c6af4a6e4f611b0c680e6ac"}, - {file = "cffi-1.14.0-cp36-cp36m-win32.whl", hash = "sha256:cef128cb4d5e0b3493f058f10ce32365972c554572ff821e175dbc6f8ff6924f"}, - {file = "cffi-1.14.0-cp36-cp36m-win_amd64.whl", hash = "sha256:337d448e5a725bba2d8293c48d9353fc68d0e9e4088d62a9571def317797522b"}, - {file = "cffi-1.14.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e577934fc5f8779c554639376beeaa5657d54349096ef24abe8c74c5d9c117c3"}, - {file = "cffi-1.14.0-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:62ae9af2d069ea2698bf536dcfe1e4eed9090211dbaafeeedf5cb6c41b352f66"}, - {file = "cffi-1.14.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:14491a910663bf9f13ddf2bc8f60562d6bc5315c1f09c704937ef17293fb85b0"}, - {file = "cffi-1.14.0-cp37-cp37m-win32.whl", hash = "sha256:c43866529f2f06fe0edc6246eb4faa34f03fe88b64a0a9a942561c8e22f4b71f"}, - {file = "cffi-1.14.0-cp37-cp37m-win_amd64.whl", hash = "sha256:2089ed025da3919d2e75a4d963d008330c96751127dd6f73c8dc0c65041b4c26"}, - {file = "cffi-1.14.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3b911c2dbd4f423b4c4fcca138cadde747abdb20d196c4a48708b8a2d32b16dd"}, - {file = "cffi-1.14.0-cp38-cp38-manylinux1_i686.whl", hash = "sha256:7e63cbcf2429a8dbfe48dcc2322d5f2220b77b2e17b7ba023d6166d84655da55"}, - {file = "cffi-1.14.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:3d311bcc4a41408cf5854f06ef2c5cab88f9fded37a3b95936c9879c1640d4c2"}, - {file = "cffi-1.14.0-cp38-cp38-win32.whl", hash = "sha256:675686925a9fb403edba0114db74e741d8181683dcf216be697d208857e04ca8"}, - {file = "cffi-1.14.0-cp38-cp38-win_amd64.whl", hash = "sha256:00789914be39dffba161cfc5be31b55775de5ba2235fe49aa28c148236c4e06b"}, - {file = "cffi-1.14.0.tar.gz", hash = "sha256:2d384f4a127a15ba701207f7639d94106693b6cd64173d6c8988e2c25f3ac2b6"}, + {file = "cffi-1.14.3-2-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:3eeeb0405fd145e714f7633a5173318bd88d8bbfc3dd0a5751f8c4f70ae629bc"}, + {file = "cffi-1.14.3-2-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:cb763ceceae04803adcc4e2d80d611ef201c73da32d8f2722e9d0ab0c7f10768"}, + {file = "cffi-1.14.3-2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:44f60519595eaca110f248e5017363d751b12782a6f2bd6a7041cba275215f5d"}, + {file = "cffi-1.14.3-2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c53af463f4a40de78c58b8b2710ade243c81cbca641e34debf3396a9640d6ec1"}, + {file = "cffi-1.14.3-2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:33c6cdc071ba5cd6d96769c8969a0531be2d08c2628a0143a10a7dcffa9719ca"}, + {file = "cffi-1.14.3-2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c11579638288e53fc94ad60022ff1b67865363e730ee41ad5e6f0a17188b327a"}, + {file = "cffi-1.14.3-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:3cb3e1b9ec43256c4e0f8d2837267a70b0e1ca8c4f456685508ae6106b1f504c"}, + {file = "cffi-1.14.3-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:f0620511387790860b249b9241c2f13c3a80e21a73e0b861a2df24e9d6f56730"}, + {file = "cffi-1.14.3-cp27-cp27m-win32.whl", hash = "sha256:005f2bfe11b6745d726dbb07ace4d53f057de66e336ff92d61b8c7e9c8f4777d"}, + {file = "cffi-1.14.3-cp27-cp27m-win_amd64.whl", hash = "sha256:2f9674623ca39c9ebe38afa3da402e9326c245f0f5ceff0623dccdac15023e05"}, + {file = "cffi-1.14.3-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:09e96138280241bd355cd585148dec04dbbedb4f46128f340d696eaafc82dd7b"}, + {file = "cffi-1.14.3-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:3363e77a6176afb8823b6e06db78c46dbc4c7813b00a41300a4873b6ba63b171"}, + {file = "cffi-1.14.3-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:0ef488305fdce2580c8b2708f22d7785ae222d9825d3094ab073e22e93dfe51f"}, + {file = "cffi-1.14.3-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:0b1ad452cc824665ddc682400b62c9e4f5b64736a2ba99110712fdee5f2505c4"}, + {file = "cffi-1.14.3-cp35-cp35m-win32.whl", hash = "sha256:85ba797e1de5b48aa5a8427b6ba62cf69607c18c5d4eb747604b7302f1ec382d"}, + {file = "cffi-1.14.3-cp35-cp35m-win_amd64.whl", hash = "sha256:e66399cf0fc07de4dce4f588fc25bfe84a6d1285cc544e67987d22663393926d"}, + {file = "cffi-1.14.3-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:15f351bed09897fbda218e4db5a3d5c06328862f6198d4fb385f3e14e19decb3"}, + {file = "cffi-1.14.3-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:4d7c26bfc1ea9f92084a1d75e11999e97b62d63128bcc90c3624d07813c52808"}, + {file = "cffi-1.14.3-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:23e5d2040367322824605bc29ae8ee9175200b92cb5483ac7d466927a9b3d537"}, + {file = "cffi-1.14.3-cp36-cp36m-win32.whl", hash = "sha256:a624fae282e81ad2e4871bdb767e2c914d0539708c0f078b5b355258293c98b0"}, + {file = "cffi-1.14.3-cp36-cp36m-win_amd64.whl", hash = "sha256:de31b5164d44ef4943db155b3e8e17929707cac1e5bd2f363e67a56e3af4af6e"}, + {file = "cffi-1.14.3-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:f92cdecb618e5fa4658aeb97d5eb3d2f47aa94ac6477c6daf0f306c5a3b9e6b1"}, + {file = "cffi-1.14.3-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:22399ff4870fb4c7ef19fff6eeb20a8bbf15571913c181c78cb361024d574579"}, + {file = "cffi-1.14.3-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:f4eae045e6ab2bb54ca279733fe4eb85f1effda392666308250714e01907f394"}, + {file = "cffi-1.14.3-cp37-cp37m-win32.whl", hash = "sha256:b0358e6fefc74a16f745afa366acc89f979040e0cbc4eec55ab26ad1f6a9bfbc"}, + {file = "cffi-1.14.3-cp37-cp37m-win_amd64.whl", hash = "sha256:6642f15ad963b5092d65aed022d033c77763515fdc07095208f15d3563003869"}, + {file = "cffi-1.14.3-cp38-cp38-manylinux1_i686.whl", hash = "sha256:2791f68edc5749024b4722500e86303a10d342527e1e3bcac47f35fbd25b764e"}, + {file = "cffi-1.14.3-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:529c4ed2e10437c205f38f3691a68be66c39197d01062618c55f74294a4a4828"}, + {file = "cffi-1.14.3-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:8f0f1e499e4000c4c347a124fa6a27d37608ced4fe9f7d45070563b7c4c370c9"}, + {file = "cffi-1.14.3-cp38-cp38-win32.whl", hash = "sha256:3b8eaf915ddc0709779889c472e553f0d3e8b7bdf62dab764c8921b09bf94522"}, + {file = "cffi-1.14.3-cp38-cp38-win_amd64.whl", hash = "sha256:bbd2f4dfee1079f76943767fce837ade3087b578aeb9f69aec7857d5bf25db15"}, + {file = "cffi-1.14.3-cp39-cp39-manylinux1_i686.whl", hash = "sha256:cc75f58cdaf043fe6a7a6c04b3b5a0e694c6a9e24050967747251fb80d7bce0d"}, + {file = "cffi-1.14.3-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:bf39a9e19ce7298f1bd6a9758fa99707e9e5b1ebe5e90f2c3913a47bc548747c"}, + {file = "cffi-1.14.3-cp39-cp39-win32.whl", hash = "sha256:d80998ed59176e8cba74028762fbd9b9153b9afc71ea118e63bbf5d4d0f9552b"}, + {file = "cffi-1.14.3-cp39-cp39-win_amd64.whl", hash = "sha256:c150eaa3dadbb2b5339675b88d4573c1be3cb6f2c33a6c83387e10cc0bf05bd3"}, + {file = "cffi-1.14.3.tar.gz", hash = "sha256:f92f789e4f9241cd262ad7a555ca2c648a98178a953af117ef7fad46aa1d5591"}, ] cfgv = [ - {file = "cfgv-3.1.0-py2.py3-none-any.whl", hash = "sha256:1ccf53320421aeeb915275a196e23b3b8ae87dea8ac6698b1638001d4a486d53"}, - {file = "cfgv-3.1.0.tar.gz", hash = "sha256:c8e8f552ffcc6194f4e18dd4f68d9aef0c0d58ae7e7be8c82bee3c5e9edfa513"}, + {file = "cfgv-3.2.0-py2.py3-none-any.whl", hash = "sha256:32e43d604bbe7896fe7c248a9c2276447dbef840feb28fe20494f62af110211d"}, + {file = "cfgv-3.2.0.tar.gz", hash = "sha256:cf22deb93d4bcf92f345a5c3cd39d3d41d6340adc60c78bbbd6588c384fda6a1"}, ] chardet = [ {file = "chardet-3.0.4-py2.py3-none-any.whl", hash = "sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691"}, {file = "chardet-3.0.4.tar.gz", hash = "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae"}, ] cleo = [ - {file = "cleo-0.7.6-py2.py3-none-any.whl", hash = "sha256:9443d67e5b2da79b32d820ae41758dd6a25618345cb10b9a022a695e26b291b9"}, - {file = "cleo-0.7.6.tar.gz", hash = "sha256:99cf342406f3499cec43270fcfaf93c126c5164092eca201dfef0f623360b409"}, + {file = "cleo-0.8.1-py2.py3-none-any.whl", hash = "sha256:141cda6dc94a92343be626bb87a0b6c86ae291dfc732a57bf04310d4b4201753"}, + {file = "cleo-0.8.1.tar.gz", hash = "sha256:3d0e22d30117851b45970b6c14aca4ab0b18b1b53c8af57bed13208147e4069f"}, ] click = [ {file = "click-7.1.2-py2.py3-none-any.whl", hash = "sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc"}, {file = "click-7.1.2.tar.gz", hash = "sha256:d2b5255c7c6349bc1bd1e59e08cd12acbbd63ce649f2588755783aa94dfb6b1a"}, ] clikit = [ - {file = "clikit-0.4.3-py2.py3-none-any.whl", hash = "sha256:71e321b7795a2a6c4888629f43365d52db071737e668ab16861121d7dd3ada09"}, - {file = "clikit-0.4.3.tar.gz", hash = "sha256:6e2d7e115e7c7b35bceb0209109935ab2f9ab50910e9ff2293f7fa0b7abf973e"}, + {file = "clikit-0.6.2-py2.py3-none-any.whl", hash = "sha256:71268e074e68082306e23d7369a7b99f824a0ef926e55ba2665e911f7208489e"}, + {file = "clikit-0.6.2.tar.gz", hash = "sha256:442ee5db9a14120635c5990bcdbfe7c03ada5898291f0c802f77be71569ded59"}, ] colorama = [ - {file = "colorama-0.4.3-py2.py3-none-any.whl", hash = "sha256:7d73d2a99753107a36ac6b455ee49046802e59d9d076ef8e47b61499fa29afff"}, - {file = "colorama-0.4.3.tar.gz", hash = "sha256:e96da0d330793e2cb9485e9ddfd918d456036c7149416295932478192f4436a1"}, + {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"}, + {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"}, ] coverage = [ - {file = "coverage-5.1-cp27-cp27m-macosx_10_12_x86_64.whl", hash = "sha256:0cb4be7e784dcdc050fc58ef05b71aa8e89b7e6636b99967fadbdba694cf2b65"}, - {file = "coverage-5.1-cp27-cp27m-macosx_10_13_intel.whl", hash = "sha256:c317eaf5ff46a34305b202e73404f55f7389ef834b8dbf4da09b9b9b37f76dd2"}, - {file = "coverage-5.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:b83835506dfc185a319031cf853fa4bb1b3974b1f913f5bb1a0f3d98bdcded04"}, - {file = "coverage-5.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:5f2294dbf7875b991c381e3d5af2bcc3494d836affa52b809c91697449d0eda6"}, - {file = "coverage-5.1-cp27-cp27m-win32.whl", hash = "sha256:de807ae933cfb7f0c7d9d981a053772452217df2bf38e7e6267c9cbf9545a796"}, - {file = "coverage-5.1-cp27-cp27m-win_amd64.whl", hash = "sha256:bf9cb9a9fd8891e7efd2d44deb24b86d647394b9705b744ff6f8261e6f29a730"}, - {file = "coverage-5.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:acf3763ed01af8410fc36afea23707d4ea58ba7e86a8ee915dfb9ceff9ef69d0"}, - {file = "coverage-5.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:dec5202bfe6f672d4511086e125db035a52b00f1648d6407cc8e526912c0353a"}, - {file = "coverage-5.1-cp35-cp35m-macosx_10_12_x86_64.whl", hash = "sha256:7a5bdad4edec57b5fb8dae7d3ee58622d626fd3a0be0dfceda162a7035885ecf"}, - {file = "coverage-5.1-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:1601e480b9b99697a570cea7ef749e88123c04b92d84cedaa01e117436b4a0a9"}, - {file = "coverage-5.1-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:dbe8c6ae7534b5b024296464f387d57c13caa942f6d8e6e0346f27e509f0f768"}, - {file = "coverage-5.1-cp35-cp35m-win32.whl", hash = "sha256:a027ef0492ede1e03a8054e3c37b8def89a1e3c471482e9f046906ba4f2aafd2"}, - {file = "coverage-5.1-cp35-cp35m-win_amd64.whl", hash = "sha256:0e61d9803d5851849c24f78227939c701ced6704f337cad0a91e0972c51c1ee7"}, - {file = "coverage-5.1-cp36-cp36m-macosx_10_13_x86_64.whl", hash = "sha256:2d27a3f742c98e5c6b461ee6ef7287400a1956c11421eb574d843d9ec1f772f0"}, - {file = "coverage-5.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:66460ab1599d3cf894bb6baee8c684788819b71a5dc1e8fa2ecc152e5d752019"}, - {file = "coverage-5.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:5c542d1e62eece33c306d66fe0a5c4f7f7b3c08fecc46ead86d7916684b36d6c"}, - {file = "coverage-5.1-cp36-cp36m-win32.whl", hash = "sha256:2742c7515b9eb368718cd091bad1a1b44135cc72468c731302b3d641895b83d1"}, - {file = "coverage-5.1-cp36-cp36m-win_amd64.whl", hash = "sha256:dead2ddede4c7ba6cb3a721870f5141c97dc7d85a079edb4bd8d88c3ad5b20c7"}, - {file = "coverage-5.1-cp37-cp37m-macosx_10_13_x86_64.whl", hash = "sha256:01333e1bd22c59713ba8a79f088b3955946e293114479bbfc2e37d522be03355"}, - {file = "coverage-5.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:e1ea316102ea1e1770724db01998d1603ed921c54a86a2efcb03428d5417e489"}, - {file = "coverage-5.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:adeb4c5b608574a3d647011af36f7586811a2c1197c861aedb548dd2453b41cd"}, - {file = "coverage-5.1-cp37-cp37m-win32.whl", hash = "sha256:782caea581a6e9ff75eccda79287daefd1d2631cc09d642b6ee2d6da21fc0a4e"}, - {file = "coverage-5.1-cp37-cp37m-win_amd64.whl", hash = "sha256:00f1d23f4336efc3b311ed0d807feb45098fc86dee1ca13b3d6768cdab187c8a"}, - {file = "coverage-5.1-cp38-cp38-macosx_10_13_x86_64.whl", hash = "sha256:402e1744733df483b93abbf209283898e9f0d67470707e3c7516d84f48524f55"}, - {file = "coverage-5.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:a3f3654d5734a3ece152636aad89f58afc9213c6520062db3978239db122f03c"}, - {file = "coverage-5.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:6402bd2fdedabbdb63a316308142597534ea8e1895f4e7d8bf7476c5e8751fef"}, - {file = "coverage-5.1-cp38-cp38-win32.whl", hash = "sha256:8fa0cbc7ecad630e5b0f4f35b0f6ad419246b02bc750de7ac66db92667996d24"}, - {file = "coverage-5.1-cp38-cp38-win_amd64.whl", hash = "sha256:79a3cfd6346ce6c13145731d39db47b7a7b859c0272f02cdb89a3bdcbae233a0"}, - {file = "coverage-5.1-cp39-cp39-win32.whl", hash = "sha256:a82b92b04a23d3c8a581fc049228bafde988abacba397d57ce95fe95e0338ab4"}, - {file = "coverage-5.1-cp39-cp39-win_amd64.whl", hash = "sha256:bb28a7245de68bf29f6fb199545d072d1036a1917dca17a1e75bbb919e14ee8e"}, - {file = "coverage-5.1.tar.gz", hash = "sha256:f90bfc4ad18450c80b024036eaf91e4a246ae287701aaa88eaebebf150868052"}, + {file = "coverage-5.3-cp27-cp27m-macosx_10_13_intel.whl", hash = "sha256:bd3166bb3b111e76a4f8e2980fa1addf2920a4ca9b2b8ca36a3bc3dedc618270"}, + {file = "coverage-5.3-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:9342dd70a1e151684727c9c91ea003b2fb33523bf19385d4554f7897ca0141d4"}, + {file = "coverage-5.3-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:63808c30b41f3bbf65e29f7280bf793c79f54fb807057de7e5238ffc7cc4d7b9"}, + {file = "coverage-5.3-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:4d6a42744139a7fa5b46a264874a781e8694bb32f1d76d8137b68138686f1729"}, + {file = "coverage-5.3-cp27-cp27m-win32.whl", hash = "sha256:86e9f8cd4b0cdd57b4ae71a9c186717daa4c5a99f3238a8723f416256e0b064d"}, + {file = "coverage-5.3-cp27-cp27m-win_amd64.whl", hash = "sha256:7858847f2d84bf6e64c7f66498e851c54de8ea06a6f96a32a1d192d846734418"}, + {file = "coverage-5.3-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:530cc8aaf11cc2ac7430f3614b04645662ef20c348dce4167c22d99bec3480e9"}, + {file = "coverage-5.3-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:381ead10b9b9af5f64646cd27107fb27b614ee7040bb1226f9c07ba96625cbb5"}, + {file = "coverage-5.3-cp35-cp35m-macosx_10_13_x86_64.whl", hash = "sha256:71b69bd716698fa62cd97137d6f2fdf49f534decb23a2c6fc80813e8b7be6822"}, + {file = "coverage-5.3-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:1d44bb3a652fed01f1f2c10d5477956116e9b391320c94d36c6bf13b088a1097"}, + {file = "coverage-5.3-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:1c6703094c81fa55b816f5ae542c6ffc625fec769f22b053adb42ad712d086c9"}, + {file = "coverage-5.3-cp35-cp35m-win32.whl", hash = "sha256:cedb2f9e1f990918ea061f28a0f0077a07702e3819602d3507e2ff98c8d20636"}, + {file = "coverage-5.3-cp35-cp35m-win_amd64.whl", hash = "sha256:7f43286f13d91a34fadf61ae252a51a130223c52bfefb50310d5b2deb062cf0f"}, + {file = "coverage-5.3-cp36-cp36m-macosx_10_13_x86_64.whl", hash = "sha256:c851b35fc078389bc16b915a0a7c1d5923e12e2c5aeec58c52f4aa8085ac8237"}, + {file = "coverage-5.3-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:aac1ba0a253e17889550ddb1b60a2063f7474155465577caa2a3b131224cfd54"}, + {file = "coverage-5.3-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:2b31f46bf7b31e6aa690d4c7a3d51bb262438c6dcb0d528adde446531d0d3bb7"}, + {file = "coverage-5.3-cp36-cp36m-win32.whl", hash = "sha256:c5f17ad25d2c1286436761b462e22b5020d83316f8e8fcb5deb2b3151f8f1d3a"}, + {file = "coverage-5.3-cp36-cp36m-win_amd64.whl", hash = "sha256:aef72eae10b5e3116bac6957de1df4d75909fc76d1499a53fb6387434b6bcd8d"}, + {file = "coverage-5.3-cp37-cp37m-macosx_10_13_x86_64.whl", hash = "sha256:e8caf961e1b1a945db76f1b5fa9c91498d15f545ac0ababbe575cfab185d3bd8"}, + {file = "coverage-5.3-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:29a6272fec10623fcbe158fdf9abc7a5fa032048ac1d8631f14b50fbfc10d17f"}, + {file = "coverage-5.3-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:2d43af2be93ffbad25dd959899b5b809618a496926146ce98ee0b23683f8c51c"}, + {file = "coverage-5.3-cp37-cp37m-win32.whl", hash = "sha256:c3888a051226e676e383de03bf49eb633cd39fc829516e5334e69b8d81aae751"}, + {file = "coverage-5.3-cp37-cp37m-win_amd64.whl", hash = "sha256:9669179786254a2e7e57f0ecf224e978471491d660aaca833f845b72a2df3709"}, + {file = "coverage-5.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0203acd33d2298e19b57451ebb0bed0ab0c602e5cf5a818591b4918b1f97d516"}, + {file = "coverage-5.3-cp38-cp38-manylinux1_i686.whl", hash = "sha256:582ddfbe712025448206a5bc45855d16c2e491c2dd102ee9a2841418ac1c629f"}, + {file = "coverage-5.3-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:0f313707cdecd5cd3e217fc68c78a960b616604b559e9ea60cc16795c4304259"}, + {file = "coverage-5.3-cp38-cp38-win32.whl", hash = "sha256:78e93cc3571fd928a39c0b26767c986188a4118edc67bc0695bc7a284da22e82"}, + {file = "coverage-5.3-cp38-cp38-win_amd64.whl", hash = "sha256:8f264ba2701b8c9f815b272ad568d555ef98dfe1576802ab3149c3629a9f2221"}, + {file = "coverage-5.3-cp39-cp39-macosx_10_13_x86_64.whl", hash = "sha256:50691e744714856f03a86df3e2bff847c2acede4c191f9a1da38f088df342978"}, + {file = "coverage-5.3-cp39-cp39-manylinux1_i686.whl", hash = "sha256:9361de40701666b034c59ad9e317bae95c973b9ff92513dd0eced11c6adf2e21"}, + {file = "coverage-5.3-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:c1b78fb9700fc961f53386ad2fd86d87091e06ede5d118b8a50dea285a071c24"}, + {file = "coverage-5.3-cp39-cp39-win32.whl", hash = "sha256:cb7df71de0af56000115eafd000b867d1261f786b5eebd88a0ca6360cccfaca7"}, + {file = "coverage-5.3-cp39-cp39-win_amd64.whl", hash = "sha256:47a11bdbd8ada9b7ee628596f9d97fbd3851bd9999d398e9436bd67376dbece7"}, + {file = "coverage-5.3.tar.gz", hash = "sha256:280baa8ec489c4f542f8940f9c4c2181f0306a8ee1a54eceba071a449fb870a0"}, +] +crashtest = [ + {file = "crashtest-0.3.1-py3-none-any.whl", hash = "sha256:300f4b0825f57688b47b6d70c6a31de33512eb2fa1ac614f780939aa0cf91680"}, + {file = "crashtest-0.3.1.tar.gz", hash = "sha256:42ca7b6ce88b6c7433e2ce47ea884e91ec93104a4b754998be498a8e6c3d37dd"}, ] cryptography = [ - {file = "cryptography-2.9.2-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:daf54a4b07d67ad437ff239c8a4080cfd1cc7213df57d33c97de7b4738048d5e"}, - {file = "cryptography-2.9.2-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:3b3eba865ea2754738616f87292b7f29448aec342a7c720956f8083d252bf28b"}, - {file = "cryptography-2.9.2-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:c447cf087cf2dbddc1add6987bbe2f767ed5317adb2d08af940db517dd704365"}, - {file = "cryptography-2.9.2-cp27-cp27m-win32.whl", hash = "sha256:f118a95c7480f5be0df8afeb9a11bd199aa20afab7a96bcf20409b411a3a85f0"}, - {file = "cryptography-2.9.2-cp27-cp27m-win_amd64.whl", hash = "sha256:c4fd17d92e9d55b84707f4fd09992081ba872d1a0c610c109c18e062e06a2e55"}, - {file = "cryptography-2.9.2-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:d0d5aeaedd29be304848f1c5059074a740fa9f6f26b84c5b63e8b29e73dfc270"}, - {file = "cryptography-2.9.2-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:1e4014639d3d73fbc5ceff206049c5a9a849cefd106a49fa7aaaa25cc0ce35cf"}, - {file = "cryptography-2.9.2-cp35-abi3-macosx_10_9_x86_64.whl", hash = "sha256:96c080ae7118c10fcbe6229ab43eb8b090fccd31a09ef55f83f690d1ef619a1d"}, - {file = "cryptography-2.9.2-cp35-abi3-manylinux1_x86_64.whl", hash = "sha256:e993468c859d084d5579e2ebee101de8f5a27ce8e2159959b6673b418fd8c785"}, - {file = "cryptography-2.9.2-cp35-abi3-manylinux2010_x86_64.whl", hash = "sha256:88c881dd5a147e08d1bdcf2315c04972381d026cdb803325c03fe2b4a8ed858b"}, - {file = "cryptography-2.9.2-cp35-cp35m-win32.whl", hash = "sha256:651448cd2e3a6bc2bb76c3663785133c40d5e1a8c1a9c5429e4354201c6024ae"}, - {file = "cryptography-2.9.2-cp35-cp35m-win_amd64.whl", hash = "sha256:726086c17f94747cedbee6efa77e99ae170caebeb1116353c6cf0ab67ea6829b"}, - {file = "cryptography-2.9.2-cp36-cp36m-win32.whl", hash = "sha256:091d31c42f444c6f519485ed528d8b451d1a0c7bf30e8ca583a0cac44b8a0df6"}, - {file = "cryptography-2.9.2-cp36-cp36m-win_amd64.whl", hash = "sha256:bb1f0281887d89617b4c68e8db9a2c42b9efebf2702a3c5bf70599421a8623e3"}, - {file = "cryptography-2.9.2-cp37-cp37m-win32.whl", hash = "sha256:18452582a3c85b96014b45686af264563e3e5d99d226589f057ace56196ec78b"}, - {file = "cryptography-2.9.2-cp37-cp37m-win_amd64.whl", hash = "sha256:22e91636a51170df0ae4dcbd250d318fd28c9f491c4e50b625a49964b24fe46e"}, - {file = "cryptography-2.9.2-cp38-cp38-win32.whl", hash = "sha256:844a76bc04472e5135b909da6aed84360f522ff5dfa47f93e3dd2a0b84a89fa0"}, - {file = "cryptography-2.9.2-cp38-cp38-win_amd64.whl", hash = "sha256:1dfa985f62b137909496e7fc182dac687206d8d089dd03eaeb28ae16eec8e7d5"}, - {file = "cryptography-2.9.2.tar.gz", hash = "sha256:a0c30272fb4ddda5f5ffc1089d7405b7a71b0b0f51993cb4e5dbb4590b2fc229"}, + {file = "cryptography-3.2.1-cp27-cp27m-macosx_10_10_x86_64.whl", hash = "sha256:6dc59630ecce8c1f558277ceb212c751d6730bd12c80ea96b4ac65637c4f55e7"}, + {file = "cryptography-3.2.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:75e8e6684cf0034f6bf2a97095cb95f81537b12b36a8fedf06e73050bb171c2d"}, + {file = "cryptography-3.2.1-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:4e7268a0ca14536fecfdf2b00297d4e407da904718658c1ff1961c713f90fd33"}, + {file = "cryptography-3.2.1-cp27-cp27m-win32.whl", hash = "sha256:7117319b44ed1842c617d0a452383a5a052ec6aa726dfbaffa8b94c910444297"}, + {file = "cryptography-3.2.1-cp27-cp27m-win_amd64.whl", hash = "sha256:a733671100cd26d816eed39507e585c156e4498293a907029969234e5e634bc4"}, + {file = "cryptography-3.2.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:a75f306a16d9f9afebfbedc41c8c2351d8e61e818ba6b4c40815e2b5740bb6b8"}, + {file = "cryptography-3.2.1-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:5849d59358547bf789ee7e0d7a9036b2d29e9a4ddf1ce5e06bb45634f995c53e"}, + {file = "cryptography-3.2.1-cp35-abi3-macosx_10_10_x86_64.whl", hash = "sha256:bd717aa029217b8ef94a7d21632a3bb5a4e7218a4513d2521c2a2fd63011e98b"}, + {file = "cryptography-3.2.1-cp35-abi3-manylinux1_x86_64.whl", hash = "sha256:efe15aca4f64f3a7ea0c09c87826490e50ed166ce67368a68f315ea0807a20df"}, + {file = "cryptography-3.2.1-cp35-abi3-manylinux2010_x86_64.whl", hash = "sha256:32434673d8505b42c0de4de86da8c1620651abd24afe91ae0335597683ed1b77"}, + {file = "cryptography-3.2.1-cp35-abi3-manylinux2014_aarch64.whl", hash = "sha256:7b8d9d8d3a9bd240f453342981f765346c87ade811519f98664519696f8e6ab7"}, + {file = "cryptography-3.2.1-cp35-cp35m-win32.whl", hash = "sha256:d3545829ab42a66b84a9aaabf216a4dce7f16dbc76eb69be5c302ed6b8f4a29b"}, + {file = "cryptography-3.2.1-cp35-cp35m-win_amd64.whl", hash = "sha256:a4e27ed0b2504195f855b52052eadcc9795c59909c9d84314c5408687f933fc7"}, + {file = "cryptography-3.2.1-cp36-abi3-win32.whl", hash = "sha256:13b88a0bd044b4eae1ef40e265d006e34dbcde0c2f1e15eb9896501b2d8f6c6f"}, + {file = "cryptography-3.2.1-cp36-abi3-win_amd64.whl", hash = "sha256:07ca431b788249af92764e3be9a488aa1d39a0bc3be313d826bbec690417e538"}, + {file = "cryptography-3.2.1-cp36-cp36m-win32.whl", hash = "sha256:a035a10686532b0587d58a606004aa20ad895c60c4d029afa245802347fab57b"}, + {file = "cryptography-3.2.1-cp36-cp36m-win_amd64.whl", hash = "sha256:d26a2557d8f9122f9bf445fc7034242f4375bd4e95ecda007667540270965b13"}, + {file = "cryptography-3.2.1-cp37-cp37m-win32.whl", hash = "sha256:545a8550782dda68f8cdc75a6e3bf252017aa8f75f19f5a9ca940772fc0cb56e"}, + {file = "cryptography-3.2.1-cp37-cp37m-win_amd64.whl", hash = "sha256:55d0b896631412b6f0c7de56e12eb3e261ac347fbaa5d5e705291a9016e5f8cb"}, + {file = "cryptography-3.2.1-cp38-cp38-win32.whl", hash = "sha256:3cd75a683b15576cfc822c7c5742b3276e50b21a06672dc3a800a2d5da4ecd1b"}, + {file = "cryptography-3.2.1-cp38-cp38-win_amd64.whl", hash = "sha256:d25cecbac20713a7c3bc544372d42d8eafa89799f492a43b79e1dfd650484851"}, + {file = "cryptography-3.2.1.tar.gz", hash = "sha256:d3d5e10be0cf2a12214ddee45c6bd203dab435e3d83b4560c03066eda600bfe3"}, ] decorator = [ {file = "decorator-4.4.2-py2.py3-none-any.whl", hash = "sha256:41fa54c2a0cc4ba648be4fd43cff00aedf5b9465c9bf18d64325bc225f08f760"}, {file = "decorator-4.4.2.tar.gz", hash = "sha256:e3a62f0520172440ca0dcc823749319382e377f37f140a0b99ef45fecb84bfe7"}, ] distlib = [ - {file = "distlib-0.3.0.zip", hash = "sha256:2e166e231a26b36d6dfe35a48c4464346620f8645ed0ace01ee31822b288de21"}, + {file = "distlib-0.3.1-py2.py3-none-any.whl", hash = "sha256:8c09de2c67b3e7deef7184574fc060ab8a793e7adbb183d942c389c8b13c52fb"}, + {file = "distlib-0.3.1.zip", hash = "sha256:edf6116872c863e1aa9d5bb7cb5e05a022c519a4594dc703843343a9ddd9bff1"}, +] +docutils = [ + {file = "docutils-0.16-py2.py3-none-any.whl", hash = "sha256:0c5b78adfbf7762415433f5515cd5c9e762339e23369dbe8000d84a4bf4ab3af"}, + {file = "docutils-0.16.tar.gz", hash = "sha256:c2de3a60e9e7d07be26b7f2b00ca0309c207e06c100f9cc2a94931fc75a478fc"}, ] filelock = [ {file = "filelock-3.0.12-py3-none-any.whl", hash = "sha256:929b7d63ec5b7d6b71b0fa5ac14e030b3f70b75747cef1b10da9b879fef15836"}, {file = "filelock-3.0.12.tar.gz", hash = "sha256:18d82244ee114f543149c66a6e0c14e9c4f8a1044b5cdaadd0f82159d6a6ff59"}, ] flake8 = [ - {file = "flake8-3.8.3-py2.py3-none-any.whl", hash = "sha256:15e351d19611c887e482fb960eae4d44845013cc142d42896e9862f775d8cf5c"}, - {file = "flake8-3.8.3.tar.gz", hash = "sha256:f04b9fcbac03b0a3e58c0ab3a0ecc462e023a9faf046d57794184028123aa208"}, + {file = "flake8-3.8.4-py2.py3-none-any.whl", hash = "sha256:749dbbd6bfd0cf1318af27bf97a14e28e5ff548ef8e5b1566ccfb25a11e7c839"}, + {file = "flake8-3.8.4.tar.gz", hash = "sha256:aadae8761ec651813c24be05c6f7b4680857ef6afaae4651a4eccaef97ce6c3b"}, ] flake8-html = [ {file = "flake8-html-0.4.1.tar.gz", hash = "sha256:2fb436cbfe1e109275bc8fb7fdd0cb00e67b3b48cfeb397309b6b2c61eeb4cb4"}, {file = "flake8_html-0.4.1-py2.py3-none-any.whl", hash = "sha256:17324eb947e7006807e4184ee26953e67baf421b3cf9e646a38bfec34eec5a94"}, ] +furo = [ + {file = "furo-2020.11.15b17-py3-none-any.whl", hash = "sha256:0186e01b9be564679f15d8fda313baff633ae11d5bd28147ac8e4668eb143d62"}, + {file = "furo-2020.11.15b17.tar.gz", hash = "sha256:f34cb10ca26967b03e7511349974d720bc49709835b022944ca6c881221f1f2c"}, +] future = [ {file = "future-0.18.2.tar.gz", hash = "sha256:b1bead90b70cf6ec3f0710ae53a525360fa360d306a86583adc6bf83a4db537d"}, ] html5lib = [ - {file = "html5lib-1.0.1-py2.py3-none-any.whl", hash = "sha256:20b159aa3badc9d5ee8f5c647e5efd02ed2a66ab8d354930bd9ff139fc1dc0a3"}, - {file = "html5lib-1.0.1.tar.gz", hash = "sha256:66cb0dcfdbbc4f9c3ba1a63fdb511ffdbd4f513b2b6d81b80cd26ce6b3fb3736"}, + {file = "html5lib-1.1-py2.py3-none-any.whl", hash = "sha256:0d78f8fde1c230e99fe37986a60526d7049ed4bf8a9fadbad5f00e22e58e041d"}, + {file = "html5lib-1.1.tar.gz", hash = "sha256:b2e5b40261e20f354d198eae92afc10d750afb487ed5e50f9c4eaf07c184146f"}, ] identify = [ - {file = "identify-1.4.19-py2.py3-none-any.whl", hash = "sha256:781fd3401f5d2b17b22a8b18b493a48d5d948e3330634e82742e23f9c20234ef"}, - {file = "identify-1.4.19.tar.gz", hash = "sha256:249ebc7e2066d6393d27c1b1be3b70433f824a120b1d8274d362f1eb419e3b52"}, + {file = "identify-1.5.9-py2.py3-none-any.whl", hash = "sha256:5dd84ac64a9a115b8e0b27d1756b244b882ad264c3c423f42af8235a6e71ca12"}, + {file = "identify-1.5.9.tar.gz", hash = "sha256:c9504ba6a043ee2db0a9d69e43246bc138034895f6338d5aed1b41e4a73b1513"}, ] idna = [ - {file = "idna-2.9-py2.py3-none-any.whl", hash = "sha256:a068a21ceac8a4d63dbfd964670474107f541babbd2250d61922f029858365fa"}, - {file = "idna-2.9.tar.gz", hash = "sha256:7588d1c14ae4c77d74036e8c22ff447b26d0fde8f007354fd48a7814db15b7cb"}, + {file = "idna-2.10-py2.py3-none-any.whl", hash = "sha256:b97d804b1e9b523befed77c48dacec60e6dcb0b5391d57af6a65a312a90648c0"}, + {file = "idna-2.10.tar.gz", hash = "sha256:b307872f855b18632ce0c21c5e45be78c0ea7ae4c15c828c20788b26921eb3f6"}, +] +imagesize = [ + {file = "imagesize-1.2.0-py2.py3-none-any.whl", hash = "sha256:6965f19a6a2039c7d48bca7dba2473069ff854c36ae6f19d2cde309d998228a1"}, + {file = "imagesize-1.2.0.tar.gz", hash = "sha256:b1f6b5a4eab1f73479a50fb79fcf729514a900c341d8503d62a62dbc4127a2b1"}, ] importlib-metadata = [ - {file = "importlib_metadata-1.1.3-py2.py3-none-any.whl", hash = "sha256:7c7f8ac40673f507f349bef2eed21a0e5f01ddf5b2a7356a6c65eb2099b53764"}, - {file = "importlib_metadata-1.1.3.tar.gz", hash = "sha256:7a99fb4084ffe6dae374961ba7a6521b79c1d07c658ab3a28aa264ee1d1b14e3"}, - {file = "importlib_metadata-1.6.1-py2.py3-none-any.whl", hash = "sha256:15ec6c0fd909e893e3a08b3a7c76ecb149122fb14b7efe1199ddd4c7c57ea958"}, - {file = "importlib_metadata-1.6.1.tar.gz", hash = "sha256:0505dd08068cfec00f53a74a0ad927676d7757da81b7436a6eefe4c7cf75c545"}, + {file = "importlib_metadata-1.7.0-py2.py3-none-any.whl", hash = "sha256:dc15b2969b4ce36305c51eebe62d418ac7791e9a157911d58bfb1f9ccd8e2070"}, + {file = "importlib_metadata-1.7.0.tar.gz", hash = "sha256:90bb658cdbbf6d1735b6341ce708fc7024a3e14e99ffdc5783edea9f9b077f83"}, ] ipython = [ - {file = "ipython-7.15.0-py3-none-any.whl", hash = "sha256:1b85d65632211bf5d3e6f1406f3393c8c429a47d7b947b9a87812aa5bce6595c"}, - {file = "ipython-7.15.0.tar.gz", hash = "sha256:0ef1433879816a960cd3ae1ae1dc82c64732ca75cec8dab5a4e29783fb571d0e"}, + {file = "ipython-7.19.0-py3-none-any.whl", hash = "sha256:c987e8178ced651532b3b1ff9965925bfd445c279239697052561a9ab806d28f"}, + {file = "ipython-7.19.0.tar.gz", hash = "sha256:cbb2ef3d5961d44e6a963b9817d4ea4e1fa2eb589c371a470fed14d8d40cbd6a"}, ] ipython-genutils = [ {file = "ipython_genutils-0.2.0-py2.py3-none-any.whl", hash = "sha256:72dd37233799e619666c9f639a9da83c34013a73e8bbc79a7a6348d93c61fab8"}, @@ -1653,31 +1834,27 @@ isort = [ {file = "isort-4.3.21.tar.gz", hash = "sha256:54da7e92468955c4fceacd0c86bd0ec997b0e1ee80d97f67c35a78b719dccab1"}, ] jedi = [ - {file = "jedi-0.17.0-py2.py3-none-any.whl", hash = "sha256:cd60c93b71944d628ccac47df9a60fec53150de53d42dc10a7fc4b5ba6aae798"}, - {file = "jedi-0.17.0.tar.gz", hash = "sha256:df40c97641cb943661d2db4c33c2e1ff75d491189423249e989bcea4464f3030"}, + {file = "jedi-0.17.2-py2.py3-none-any.whl", hash = "sha256:98cc583fa0f2f8304968199b01b6b4b94f469a1f4a74c1560506ca2a211378b5"}, + {file = "jedi-0.17.2.tar.gz", hash = "sha256:86ed7d9b750603e4ba582ea8edc678657fb4007894a12bcf6f4bb97892f31d20"}, ] jeepney = [ - {file = "jeepney-0.4.3-py3-none-any.whl", hash = "sha256:d6c6b49683446d2407d2fe3acb7a368a77ff063f9182fe427da15d622adc24cf"}, - {file = "jeepney-0.4.3.tar.gz", hash = "sha256:3479b861cc2b6407de5188695fa1a8d57e5072d7059322469b62628869b8e36e"}, + {file = "jeepney-0.5.0-py3-none-any.whl", hash = "sha256:e0e057fe2069a54257de32eb26cf14aac5fa90f5836f49926009a5022fb1e31a"}, + {file = "jeepney-0.5.0.tar.gz", hash = "sha256:2531d17ccfb3485d4eaee03c1a19a75f28b3ac0fbb5a1b683b77b820e5b0f509"}, ] jinja2 = [ {file = "Jinja2-2.11.2-py2.py3-none-any.whl", hash = "sha256:f0a4641d3cf955324a89c04f3d94663aa4d638abe8f733ecd3582848e1c37035"}, {file = "Jinja2-2.11.2.tar.gz", hash = "sha256:89aab215427ef59c34ad58735269eb58b1a5808103067f7bb9d5836c651b3bb0"}, ] joblib = [ - {file = "joblib-0.15.1-py3-none-any.whl", hash = "sha256:6825784ffda353cc8a1be573118085789e5b5d29401856b35b756645ab5aecb5"}, - {file = "joblib-0.15.1.tar.gz", hash = "sha256:61e49189c84b3c5d99a969d314853f4d1d263316cc694bec17548ebaa9c47b6e"}, -] -jsonschema = [ - {file = "jsonschema-3.2.0-py2.py3-none-any.whl", hash = "sha256:4e5b3cf8216f577bee9ce139cbe72eca3ea4f292ec60928ff24758ce626cd163"}, - {file = "jsonschema-3.2.0.tar.gz", hash = "sha256:c8a85b28d377cc7737e46e2d9f2b4f44ee3c0e1deac6bf46ddefc7187d30797a"}, + {file = "joblib-0.17.0-py3-none-any.whl", hash = "sha256:698c311779f347cf6b7e6b8a39bb682277b8ee4aba8cf9507bc0cf4cd4737b72"}, + {file = "joblib-0.17.0.tar.gz", hash = "sha256:9e284edd6be6b71883a63c9b7f124738a3c16195513ad940eae7e3438de885d5"}, ] keyring = [ - {file = "keyring-20.0.1-py2.py3-none-any.whl", hash = "sha256:c674f032424b4bffc62abeac5523ec49cc84aed07a480c3233e0baf618efc15c"}, - {file = "keyring-20.0.1.tar.gz", hash = "sha256:963bfa7f090269d30bdc5e25589e5fd9dad2cf2a7c6f176a7f2386910e5d0d8d"}, + {file = "keyring-21.5.0-py3-none-any.whl", hash = "sha256:12de23258a95f3b13e5b167f7a641a878e91eab8ef16fafc077720a95e6115bb"}, + {file = "keyring-21.5.0.tar.gz", hash = "sha256:207bd66f2a9881c835dad653da04e196c678bf104f8252141d2d3c4f31051579"}, ] livereload = [ - {file = "livereload-2.6.2.tar.gz", hash = "sha256:d1eddcb5c5eb8d2ca1fa1f750e580da624c0f7fcb734aa5780dc81b7dcbd89be"}, + {file = "livereload-2.6.3.tar.gz", hash = "sha256:776f2f865e59fde56490a56bcc6773b6917366bce0c267c60ee8aaf1a0959869"}, ] lockfile = [ {file = "lockfile-0.12.2-py2.py3-none-any.whl", hash = "sha256:6c3cb24f344923d30b2785d5ad75182c8ea7ac1b6171b08657258ec7429d50fa"}, @@ -1688,37 +1865,47 @@ lunr = [ {file = "lunr-0.5.8.tar.gz", hash = "sha256:c4fb063b98eff775dd638b3df380008ae85e6cb1d1a24d1cd81a10ef6391c26e"}, ] lxml = [ - {file = "lxml-4.5.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:ee2be8b8f72a2772e72ab926a3bccebf47bb727bda41ae070dc91d1fb759b726"}, - {file = "lxml-4.5.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:fadd2a63a2bfd7fb604508e553d1cf68eca250b2fbdbd81213b5f6f2fbf23529"}, - {file = "lxml-4.5.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:4f282737d187ae723b2633856085c31ae5d4d432968b7f3f478a48a54835f5c4"}, - {file = "lxml-4.5.1-cp27-cp27m-win32.whl", hash = "sha256:7fd88cb91a470b383aafad554c3fe1ccf6dfb2456ff0e84b95335d582a799804"}, - {file = "lxml-4.5.1-cp27-cp27m-win_amd64.whl", hash = "sha256:0790ddca3f825dd914978c94c2545dbea5f56f008b050e835403714babe62a5f"}, - {file = "lxml-4.5.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:9144ce36ca0824b29ebc2e02ca186e54040ebb224292072250467190fb613b96"}, - {file = "lxml-4.5.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:a636346c6c0e1092ffc202d97ec1843a75937d8c98aaf6771348ad6422e44bb0"}, - {file = "lxml-4.5.1-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:f95d28193c3863132b1f55c1056036bf580b5a488d908f7d22a04ace8935a3a9"}, - {file = "lxml-4.5.1-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:b26719890c79a1dae7d53acac5f089d66fd8cc68a81f4e4bd355e45470dc25e1"}, - {file = "lxml-4.5.1-cp35-cp35m-win32.whl", hash = "sha256:a9e3b8011388e7e373565daa5e92f6c9cb844790dc18e43073212bb3e76f7007"}, - {file = "lxml-4.5.1-cp35-cp35m-win_amd64.whl", hash = "sha256:2754d4406438c83144f9ffd3628bbe2dcc6d62b20dbc5c1ec4bc4385e5d44b42"}, - {file = "lxml-4.5.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:925baf6ff1ef2c45169f548cc85204433e061360bfa7d01e1be7ae38bef73194"}, - {file = "lxml-4.5.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:a87dbee7ad9dce3aaefada2081843caf08a44a8f52e03e0a4cc5819f8398f2f4"}, - {file = "lxml-4.5.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:51bb4edeb36d24ec97eb3e6a6007be128b720114f9a875d6b370317d62ac80b9"}, - {file = "lxml-4.5.1-cp36-cp36m-win32.whl", hash = "sha256:c79e5debbe092e3c93ca4aee44c9a7631bdd407b2871cb541b979fd350bbbc29"}, - {file = "lxml-4.5.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b7462cdab6fffcda853338e1741ce99706cdf880d921b5a769202ea7b94e8528"}, - {file = "lxml-4.5.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:06748c7192eab0f48e3d35a7adae609a329c6257495d5e53878003660dc0fec6"}, - {file = "lxml-4.5.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:1aa7a6197c1cdd65d974f3e4953764eee3d9c7b67e3966616b41fab7f8f516b7"}, - {file = "lxml-4.5.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:afb53edf1046599991fb4a7d03e601ab5f5422a5435c47ee6ba91ec3b61416a6"}, - {file = "lxml-4.5.1-cp37-cp37m-win32.whl", hash = "sha256:2d1ddce96cf15f1254a68dba6935e6e0f1fe39247de631c115e84dd404a6f031"}, - {file = "lxml-4.5.1-cp37-cp37m-win_amd64.whl", hash = "sha256:22c6d34fdb0e65d5f782a4d1a1edb52e0a8365858dafb1c08cb1d16546cf0786"}, - {file = "lxml-4.5.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c47a8a5d00060122ca5908909478abce7bbf62d812e3fc35c6c802df8fb01fe7"}, - {file = "lxml-4.5.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:b77975465234ff49fdad871c08aa747aae06f5e5be62866595057c43f8d2f62c"}, - {file = "lxml-4.5.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:2b02c106709466a93ed424454ce4c970791c486d5fcdf52b0d822a7e29789626"}, - {file = "lxml-4.5.1-cp38-cp38-win32.whl", hash = "sha256:7eee37c1b9815e6505847aa5e68f192e8a1b730c5c7ead39ff317fde9ce29448"}, - {file = "lxml-4.5.1-cp38-cp38-win_amd64.whl", hash = "sha256:d8d40e0121ca1606aa9e78c28a3a7d88a05c06b3ca61630242cded87d8ce55fa"}, - {file = "lxml-4.5.1.tar.gz", hash = "sha256:27ee0faf8077c7c1a589573b1450743011117f1aa1a91d5ae776bbc5ca6070f2"}, + {file = "lxml-4.6.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:4b7572145054330c8e324a72d808c8c8fbe12be33368db28c39a255ad5f7fb51"}, + {file = "lxml-4.6.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:302160eb6e9764168e01d8c9ec6becddeb87776e81d3fcb0d97954dd51d48e0a"}, + {file = "lxml-4.6.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:d4ad7fd3269281cb471ad6c7bafca372e69789540d16e3755dd717e9e5c9d82f"}, + {file = "lxml-4.6.1-cp27-cp27m-win32.whl", hash = "sha256:189ad47203e846a7a4951c17694d845b6ade7917c47c64b29b86526eefc3adf5"}, + {file = "lxml-4.6.1-cp27-cp27m-win_amd64.whl", hash = "sha256:56eff8c6fb7bc4bcca395fdff494c52712b7a57486e4fbde34c31bb9da4c6cc4"}, + {file = "lxml-4.6.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:23c83112b4dada0b75789d73f949dbb4e8f29a0a3511647024a398ebd023347b"}, + {file = "lxml-4.6.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:0e89f5d422988c65e6936e4ec0fe54d6f73f3128c80eb7ecc3b87f595523607b"}, + {file = "lxml-4.6.1-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:2358809cc64394617f2719147a58ae26dac9e21bae772b45cfb80baa26bfca5d"}, + {file = "lxml-4.6.1-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:be1ebf9cc25ab5399501c9046a7dcdaa9e911802ed0e12b7d620cd4bbf0518b3"}, + {file = "lxml-4.6.1-cp35-cp35m-manylinux2014_aarch64.whl", hash = "sha256:4fff34721b628cce9eb4538cf9a73d02e0f3da4f35a515773cce6f5fe413b360"}, + {file = "lxml-4.6.1-cp35-cp35m-win32.whl", hash = "sha256:475325e037fdf068e0c2140b818518cf6bc4aa72435c407a798b2db9f8e90810"}, + {file = "lxml-4.6.1-cp35-cp35m-win_amd64.whl", hash = "sha256:f98b6f256be6cec8dd308a8563976ddaff0bdc18b730720f6f4bee927ffe926f"}, + {file = "lxml-4.6.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:be7c65e34d1b50ab7093b90427cbc488260e4b3a38ef2435d65b62e9fa3d798a"}, + {file = "lxml-4.6.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:d18331ea905a41ae71596502bd4c9a2998902328bbabd29e3d0f5f8569fabad1"}, + {file = "lxml-4.6.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:3d9b2b72eb0dbbdb0e276403873ecfae870599c83ba22cadff2db58541e72856"}, + {file = "lxml-4.6.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:d20d32cbb31d731def4b1502294ca2ee99f9249b63bc80e03e67e8f8e126dea8"}, + {file = "lxml-4.6.1-cp36-cp36m-win32.whl", hash = "sha256:d182eada8ea0de61a45a526aa0ae4bcd222f9673424e65315c35820291ff299c"}, + {file = "lxml-4.6.1-cp36-cp36m-win_amd64.whl", hash = "sha256:c0dac835c1a22621ffa5e5f999d57359c790c52bbd1c687fe514ae6924f65ef5"}, + {file = "lxml-4.6.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:d84d741c6e35c9f3e7406cb7c4c2e08474c2a6441d59322a00dcae65aac6315d"}, + {file = "lxml-4.6.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:8862d1c2c020cb7a03b421a9a7b4fe046a208db30994fc8ff68c627a7915987f"}, + {file = "lxml-4.6.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:3a7a380bfecc551cfd67d6e8ad9faa91289173bdf12e9cfafbd2bdec0d7b1ec1"}, + {file = "lxml-4.6.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:2d6571c48328be4304aee031d2d5046cbc8aed5740c654575613c5a4f5a11311"}, + {file = "lxml-4.6.1-cp37-cp37m-win32.whl", hash = "sha256:803a80d72d1f693aa448566be46ffd70882d1ad8fc689a2e22afe63035eb998a"}, + {file = "lxml-4.6.1-cp37-cp37m-win_amd64.whl", hash = "sha256:24e811118aab6abe3ce23ff0d7d38932329c513f9cef849d3ee88b0f848f2aa9"}, + {file = "lxml-4.6.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2e311a10f3e85250910a615fe194839a04a0f6bc4e8e5bb5cac221344e3a7891"}, + {file = "lxml-4.6.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:a71400b90b3599eb7bf241f947932e18a066907bf84617d80817998cee81e4bf"}, + {file = "lxml-4.6.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:211b3bcf5da70c2d4b84d09232534ad1d78320762e2c59dedc73bf01cb1fc45b"}, + {file = "lxml-4.6.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:e65c221b2115a91035b55a593b6eb94aa1206fa3ab374f47c6dc10d364583ff9"}, + {file = "lxml-4.6.1-cp38-cp38-win32.whl", hash = "sha256:d6f8c23f65a4bfe4300b85f1f40f6c32569822d08901db3b6454ab785d9117cc"}, + {file = "lxml-4.6.1-cp38-cp38-win_amd64.whl", hash = "sha256:573b2f5496c7e9f4985de70b9bbb4719ffd293d5565513e04ac20e42e6e5583f"}, + {file = "lxml-4.6.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:098fb713b31050463751dcc694878e1d39f316b86366fb9fe3fbbe5396ac9fab"}, + {file = "lxml-4.6.1-cp39-cp39-manylinux1_i686.whl", hash = "sha256:1d87936cb5801c557f3e981c9c193861264c01209cb3ad0964a16310ca1b3301"}, + {file = "lxml-4.6.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:2d5896ddf5389560257bbe89317ca7bcb4e54a02b53a3e572e1ce4226512b51b"}, + {file = "lxml-4.6.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:9b06690224258db5cd39a84e993882a6874676f5de582da57f3df3a82ead9174"}, + {file = "lxml-4.6.1-cp39-cp39-win32.whl", hash = "sha256:bb252f802f91f59767dcc559744e91efa9df532240a502befd874b54571417bd"}, + {file = "lxml-4.6.1-cp39-cp39-win_amd64.whl", hash = "sha256:7ecaef52fd9b9535ae5f01a1dd2651f6608e4ec9dc136fc4dfe7ebe3c3ddb230"}, + {file = "lxml-4.6.1.tar.gz", hash = "sha256:c152b2e93b639d1f36ec5a8ca24cde4a8eefb2b6b83668fcd8e83a67badcb367"}, ] markdown = [ - {file = "Markdown-3.2.2-py3-none-any.whl", hash = "sha256:c467cd6233885534bf0fe96e62e3cf46cfc1605112356c4f9981512b8174de59"}, - {file = "Markdown-3.2.2.tar.gz", hash = "sha256:1fafe3f1ecabfb514a5285fca634a53c1b32a81cb0feb154264d55bf2ff22c17"}, + {file = "Markdown-3.3.3-py3-none-any.whl", hash = "sha256:c109c15b7dc20a9ac454c9e6025927d44460b85bd039da028d85e2b6d0bcc328"}, + {file = "Markdown-3.3.3.tar.gz", hash = "sha256:5d9f2b5ca24bc4c7a390d22323ca4bad200368612b5aaa7796babf971d2b2f18"}, ] markdown-include = [ {file = "markdown-include-0.5.1.tar.gz", hash = "sha256:72a45461b589489a088753893bc95c5fa5909936186485f4ed55caa57d10250f"}, @@ -1769,8 +1956,8 @@ mkdocs-material = [ {file = "mkdocs_material-4.6.3-py2.py3-none-any.whl", hash = "sha256:7f3afa0a09c07d0b89a6a9755fdb00513aee8f0cec3538bb903325c80f66f444"}, ] more-itertools = [ - {file = "more-itertools-8.4.0.tar.gz", hash = "sha256:68c70cc7167bdf5c7c9d8f6954a7837089c6a36bf565383919bb595efb8a17e5"}, - {file = "more_itertools-8.4.0-py3-none-any.whl", hash = "sha256:b78134b2063dd214000685165d81c154522c3ee0a1c0d4d113c80361c234c5a2"}, + {file = "more-itertools-8.6.0.tar.gz", hash = "sha256:b3a9005928e5bed54076e6e549c792b306fddfe72b2d1d22dd63d42d5d3899cf"}, + {file = "more_itertools-8.6.0-py3-none-any.whl", hash = "sha256:8e1a2a43b2f2727425f2b5839587ae37093f19153dc26c0927d1048ff6557330"}, ] msgpack = [ {file = "msgpack-1.0.0-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:cec8bf10981ed70998d98431cd814db0ecf3384e6b113366e7f36af71a0fca08"}, @@ -1793,23 +1980,43 @@ msgpack = [ {file = "msgpack-1.0.0.tar.gz", hash = "sha256:9534d5cc480d4aff720233411a1f765be90885750b07df772380b34c10ecb5c0"}, ] multidict = [ - {file = "multidict-4.7.6-cp35-cp35m-macosx_10_14_x86_64.whl", hash = "sha256:275ca32383bc5d1894b6975bb4ca6a7ff16ab76fa622967625baeebcf8079000"}, - {file = "multidict-4.7.6-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:1ece5a3369835c20ed57adadc663400b5525904e53bae59ec854a5d36b39b21a"}, - {file = "multidict-4.7.6-cp35-cp35m-win32.whl", hash = "sha256:5141c13374e6b25fe6bf092052ab55c0c03d21bd66c94a0e3ae371d3e4d865a5"}, - {file = "multidict-4.7.6-cp35-cp35m-win_amd64.whl", hash = "sha256:9456e90649005ad40558f4cf51dbb842e32807df75146c6d940b6f5abb4a78f3"}, - {file = "multidict-4.7.6-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:e0d072ae0f2a179c375f67e3da300b47e1a83293c554450b29c900e50afaae87"}, - {file = "multidict-4.7.6-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:3750f2205b800aac4bb03b5ae48025a64e474d2c6cc79547988ba1d4122a09e2"}, - {file = "multidict-4.7.6-cp36-cp36m-win32.whl", hash = "sha256:f07acae137b71af3bb548bd8da720956a3bc9f9a0b87733e0899226a2317aeb7"}, - {file = "multidict-4.7.6-cp36-cp36m-win_amd64.whl", hash = "sha256:6513728873f4326999429a8b00fc7ceddb2509b01d5fd3f3be7881a257b8d463"}, - {file = "multidict-4.7.6-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:feed85993dbdb1dbc29102f50bca65bdc68f2c0c8d352468c25b54874f23c39d"}, - {file = "multidict-4.7.6-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:fcfbb44c59af3f8ea984de67ec7c306f618a3ec771c2843804069917a8f2e255"}, - {file = "multidict-4.7.6-cp37-cp37m-win32.whl", hash = "sha256:4538273208e7294b2659b1602490f4ed3ab1c8cf9dbdd817e0e9db8e64be2507"}, - {file = "multidict-4.7.6-cp37-cp37m-win_amd64.whl", hash = "sha256:d14842362ed4cf63751648e7672f7174c9818459d169231d03c56e84daf90b7c"}, - {file = "multidict-4.7.6-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:c026fe9a05130e44157b98fea3ab12969e5b60691a276150db9eda71710cd10b"}, - {file = "multidict-4.7.6-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:51a4d210404ac61d32dada00a50ea7ba412e6ea945bbe992e4d7a595276d2ec7"}, - {file = "multidict-4.7.6-cp38-cp38-win32.whl", hash = "sha256:5cf311a0f5ef80fe73e4f4c0f0998ec08f954a6ec72b746f3c179e37de1d210d"}, - {file = "multidict-4.7.6-cp38-cp38-win_amd64.whl", hash = "sha256:7388d2ef3c55a8ba80da62ecfafa06a1c097c18032a501ffd4cabbc52d7f2b19"}, - {file = "multidict-4.7.6.tar.gz", hash = "sha256:fbb77a75e529021e7c4a8d4e823d88ef4d23674a202be4f5addffc72cbb91430"}, + {file = "multidict-5.0.2-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:b82400ef848bbac6b9035a105ac6acaa1fb3eea0d164e35bbb21619b88e49fed"}, + {file = "multidict-5.0.2-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:b98af08d7bb37d3456a22f689819ea793e8d6961b9629322d7728c4039071641"}, + {file = "multidict-5.0.2-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:d4a6fb98e9e9be3f7d70fd3e852369c00a027bd5ed0f3e8ade3821bcad257408"}, + {file = "multidict-5.0.2-cp36-cp36m-manylinux2014_i686.whl", hash = "sha256:2ab9cad4c5ef5c41e1123ed1f89f555aabefb9391d4e01fd6182de970b7267ed"}, + {file = "multidict-5.0.2-cp36-cp36m-manylinux2014_ppc64le.whl", hash = "sha256:62abab8088704121297d39c8f47156cb8fab1da731f513e59ba73946b22cf3d0"}, + {file = "multidict-5.0.2-cp36-cp36m-manylinux2014_s390x.whl", hash = "sha256:59182e975b8c197d0146a003d0f0d5dc5487ce4899502061d8df585b0f51fba2"}, + {file = "multidict-5.0.2-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:76cbdb22f48de64811f9ce1dd4dee09665f84f32d6a26de249a50c1e90e244e0"}, + {file = "multidict-5.0.2-cp36-cp36m-win32.whl", hash = "sha256:653b2bbb0bbf282c37279dd04f429947ac92713049e1efc615f68d4e64b1dbc2"}, + {file = "multidict-5.0.2-cp36-cp36m-win_amd64.whl", hash = "sha256:c58e53e1c73109fdf4b759db9f2939325f510a8a5215135330fe6755921e4886"}, + {file = "multidict-5.0.2-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:359ea00e1b53ceef282232308da9d9a3f60d645868a97f64df19485c7f9ef628"}, + {file = "multidict-5.0.2-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:b561e76c9e21402d9a446cdae13398f9942388b9bff529f32dfa46220af54d00"}, + {file = "multidict-5.0.2-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:9380b3f2b00b23a4106ba9dd022df3e6e2e84e1788acdbdd27603b621b3288df"}, + {file = "multidict-5.0.2-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:1cd102057b09223b919f9447c669cf2efabeefb42a42ae6233f25ffd7ee31a79"}, + {file = "multidict-5.0.2-cp37-cp37m-manylinux2014_ppc64le.whl", hash = "sha256:d99da85d6890267292065e654a329e1d2f483a5d2485e347383800e616a8c0b1"}, + {file = "multidict-5.0.2-cp37-cp37m-manylinux2014_s390x.whl", hash = "sha256:f612e8ef8408391a4a3366e3508bab8ef97b063b4918a317cb6e6de4415f01af"}, + {file = "multidict-5.0.2-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:6128d2c0956fd60e39ec7d1c8f79426f0c915d36458df59ddd1f0cff0340305f"}, + {file = "multidict-5.0.2-cp37-cp37m-win32.whl", hash = "sha256:9ed9b280f7778ad6f71826b38a73c2fdca4077817c64bc1102fdada58e75c03c"}, + {file = "multidict-5.0.2-cp37-cp37m-win_amd64.whl", hash = "sha256:f65a2442c113afde52fb09f9a6276bbc31da71add99dc76c3adf6083234e07c6"}, + {file = "multidict-5.0.2-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:2576e30bbec004e863d87216bc34abe24962cc2e964613241a1c01c7681092ab"}, + {file = "multidict-5.0.2-cp38-cp38-manylinux1_i686.whl", hash = "sha256:20cc9b2dd31761990abff7d0e63cd14dbfca4ebb52a77afc917b603473951a38"}, + {file = "multidict-5.0.2-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:6566749cd78cb37cbf8e8171b5cd2cbfc03c99f0891de12255cf17a11c07b1a3"}, + {file = "multidict-5.0.2-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:6168839491a533fa75f3f5d48acbb829475e6c7d9fa5c6e245153b5f79b986a3"}, + {file = "multidict-5.0.2-cp38-cp38-manylinux2014_ppc64le.whl", hash = "sha256:e58db0e0d60029915f7fc95a8683fa815e204f2e1990f1fb46a7778d57ca8c35"}, + {file = "multidict-5.0.2-cp38-cp38-manylinux2014_s390x.whl", hash = "sha256:8fa4549f341a057feec4c3139056ba73e17ed03a506469f447797a51f85081b5"}, + {file = "multidict-5.0.2-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:06f39f0ddc308dab4e5fa282d145f90cd38d7ed75390fc83335636909a9ec191"}, + {file = "multidict-5.0.2-cp38-cp38-win32.whl", hash = "sha256:8efcf070d60fd497db771429b1c769a3783e3a0dd96c78c027e676990176adc5"}, + {file = "multidict-5.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:060d68ae3e674c913ec41a464916f12c4d7ff17a3a9ebbf37ba7f2c681c2b33e"}, + {file = "multidict-5.0.2-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:4a3f19da871befa53b48dd81ee48542f519beffa13090dc135fffc18d8fe36db"}, + {file = "multidict-5.0.2-cp39-cp39-manylinux1_i686.whl", hash = "sha256:af271c2540d1cd2a137bef8d95a8052230aa1cda26dd3b2c73d858d89993d518"}, + {file = "multidict-5.0.2-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:3e61cc244fd30bd9fdfae13bdd0c5ec65da51a86575ff1191255cae677045ffe"}, + {file = "multidict-5.0.2-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:4df708ef412fd9b59b7e6c77857e64c1f6b4c0116b751cb399384ec9a28baa66"}, + {file = "multidict-5.0.2-cp39-cp39-manylinux2014_ppc64le.whl", hash = "sha256:cbabfc12b401d074298bfda099c58dfa5348415ae2e4ec841290627cb7cb6b2e"}, + {file = "multidict-5.0.2-cp39-cp39-manylinux2014_s390x.whl", hash = "sha256:43c7a87d8c31913311a1ab24b138254a0ee89142983b327a2c2eab7a7d10fea9"}, + {file = "multidict-5.0.2-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:fa0503947a99a1be94f799fac89d67a5e20c333e78ddae16e8534b151cdc588a"}, + {file = "multidict-5.0.2-cp39-cp39-win32.whl", hash = "sha256:17847fede1aafdb7e74e01bb34ab47a1a1ea726e8184c623c45d7e428d2d5d34"}, + {file = "multidict-5.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:a7b8b5bd16376c8ac2977748bd978a200326af5145d8d0e7f799e2b355d425b6"}, + {file = "multidict-5.0.2.tar.gz", hash = "sha256:e5bf89fe57f702a046c7ec718fe330ed50efd4bcf74722940db2eb0919cddb1c"}, ] mypy = [ {file = "mypy-0.770-cp35-cp35m-macosx_10_6_x86_64.whl", hash = "sha256:a34b577cdf6313bf24755f7a0e3f3c326d5c1f4fe7422d1d06498eb25ad0c600"}, @@ -1835,23 +2042,24 @@ nltk = [ {file = "nltk-3.5.zip", hash = "sha256:845365449cd8c5f9731f7cb9f8bd6fd0767553b9d53af9eb1b3abf7700936b35"}, ] nodeenv = [ - {file = "nodeenv-1.4.0-py2.py3-none-any.whl", hash = "sha256:4b0b77afa3ba9b54f4b6396e60b0c83f59eaeb2d63dc3cc7a70f7f4af96c82bc"}, + {file = "nodeenv-1.5.0-py2.py3-none-any.whl", hash = "sha256:5304d424c529c997bc888453aeaa6362d242b6b4631e90f3d4bf1b290f1c84a9"}, + {file = "nodeenv-1.5.0.tar.gz", hash = "sha256:ab45090ae383b716c4ef89e690c41ff8c2b257b85b309f01f3654df3d084bd7c"}, ] packaging = [ {file = "packaging-20.4-py2.py3-none-any.whl", hash = "sha256:998416ba6962ae7fbd6596850b80e17859a5753ba17c32284f67bfff33784181"}, {file = "packaging-20.4.tar.gz", hash = "sha256:4357f74f47b9c12db93624a82154e9b120fa8293699949152b22065d556079f8"}, ] parso = [ - {file = "parso-0.7.0-py2.py3-none-any.whl", hash = "sha256:158c140fc04112dc45bca311633ae5033c2c2a7b732fa33d0955bad8152a8dd0"}, - {file = "parso-0.7.0.tar.gz", hash = "sha256:908e9fae2144a076d72ae4e25539143d40b8e3eafbaeae03c1bfe226f4cdf12c"}, + {file = "parso-0.7.1-py2.py3-none-any.whl", hash = "sha256:97218d9159b2520ff45eb78028ba8b50d2bc61dcc062a9682666f2dc4bd331ea"}, + {file = "parso-0.7.1.tar.gz", hash = "sha256:caba44724b994a8a5e086460bb212abc5a8bc46951bf4a9a1210745953622eb9"}, ] pastel = [ - {file = "pastel-0.2.0-py2.py3-none-any.whl", hash = "sha256:18b559dc3ad4ba9b8bd5baebe6503f25f36d21460f021cf27a8d889cb5d17840"}, - {file = "pastel-0.2.0.tar.gz", hash = "sha256:46155fc523bdd4efcd450bbcb3f2b94a6e3b25edc0eb493e081104ad09e1ca36"}, + {file = "pastel-0.2.1-py2.py3-none-any.whl", hash = "sha256:4349225fcdf6c2bb34d483e523475de5bb04a5c10ef711263452cb37d7dd4364"}, + {file = "pastel-0.2.1.tar.gz", hash = "sha256:e6581ac04e973cac858828c6202c1e1e81fee1dc7de7683f3e1ffe0bfd8a573d"}, ] pathspec = [ - {file = "pathspec-0.8.0-py2.py3-none-any.whl", hash = "sha256:7d91249d21749788d07a2d0f94147accd8f845507400749ea19c1ec9054a12b0"}, - {file = "pathspec-0.8.0.tar.gz", hash = "sha256:da45173eb3a6f2a5a487efba21f050af2b41948be6ab52b6a1e3ff22bb8b7061"}, + {file = "pathspec-0.8.1-py2.py3-none-any.whl", hash = "sha256:aa0cb481c4041bf52ffa7b0d8fa6cd3e88a2ca4879c533c9153882ee2556790d"}, + {file = "pathspec-0.8.1.tar.gz", hash = "sha256:86379d6b86d75816baba717e64b1a3a3469deb93bb76d613c9ce79edc5cb68fd"}, ] pexpect = [ {file = "pexpect-4.8.0-py2.py3-none-any.whl", hash = "sha256:0b48a55dcb3c05f3329815901ea4fc1537514d6ba867a152b581d69ae3710937"}, @@ -1862,32 +2070,36 @@ pickleshare = [ {file = "pickleshare-0.7.5.tar.gz", hash = "sha256:87683d47965c1da65cdacaf31c8441d12b8044cdec9aca500cd78fc2c683afca"}, ] pkginfo = [ - {file = "pkginfo-1.5.0.1-py2.py3-none-any.whl", hash = "sha256:a6d9e40ca61ad3ebd0b72fbadd4fba16e4c0e4df0428c041e01e06eb6ee71f32"}, - {file = "pkginfo-1.5.0.1.tar.gz", hash = "sha256:7424f2c8511c186cd5424bbf31045b77435b37a8d604990b79d4e70d741148bb"}, + {file = "pkginfo-1.6.1-py2.py3-none-any.whl", hash = "sha256:ce14d7296c673dc4c61c759a0b6c14bae34e34eb819c0017bb6ca5b7292c56e9"}, + {file = "pkginfo-1.6.1.tar.gz", hash = "sha256:a6a4ac943b496745cec21f14f021bbd869d5e9b4f6ec06918cffea5a2f4b9193"}, ] pluggy = [ {file = "pluggy-0.13.1-py2.py3-none-any.whl", hash = "sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d"}, {file = "pluggy-0.13.1.tar.gz", hash = "sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0"}, ] poetry = [ - {file = "poetry-1.0.9-py2.py3-none-any.whl", hash = "sha256:27e0c9c16f785156a8d8d0e98a73e239c8d2083306c180718825d11d5664aea0"}, - {file = "poetry-1.0.9.tar.gz", hash = "sha256:0a4c56983546964b47cbbe0e1b49fef5662277bbf0673e3e350e1215560377ab"}, + {file = "poetry-1.1.4-py2.py3-none-any.whl", hash = "sha256:a0fd73af8831f8d8e910fa9c58af71194ed2d17e43e04cbf5db3087305027d38"}, + {file = "poetry-1.1.4.tar.gz", hash = "sha256:946a5a1173be607c7c5c593358a0fb0c0d6af4400c978929ecdb19c3a37b53a8"}, +] +poetry-core = [ + {file = "poetry-core-1.0.0.tar.gz", hash = "sha256:6a664ff389b9f45382536f8fa1611a0cb4d2de7c5a5c885db1f0c600cd11fbd5"}, + {file = "poetry_core-1.0.0-py2.py3-none-any.whl", hash = "sha256:769288e0e1b88dfcceb3185728f0b7388b26d5f93d6c22d2dcae372da51d200d"}, ] pre-commit = [ - {file = "pre_commit-2.5.1-py2.py3-none-any.whl", hash = "sha256:c5c8fd4d0e1c363723aaf0a8f9cba0f434c160b48c4028f4bae6d219177945b3"}, - {file = "pre_commit-2.5.1.tar.gz", hash = "sha256:da463cf8f0e257f9af49047ba514f6b90dbd9b4f92f4c8847a3ccd36834874c7"}, + {file = "pre_commit-2.8.2-py2.py3-none-any.whl", hash = "sha256:22e6aa3bd571debb01eb7d34483f11c01b65237be4eebbf30c3d4fb65762d315"}, + {file = "pre_commit-2.8.2.tar.gz", hash = "sha256:905ebc9b534b991baec87e934431f2d0606ba27f2b90f7f652985f5a5b8b6ae6"}, ] prompt-toolkit = [ - {file = "prompt_toolkit-3.0.5-py3-none-any.whl", hash = "sha256:df7e9e63aea609b1da3a65641ceaf5bc7d05e0a04de5bd45d05dbeffbabf9e04"}, - {file = "prompt_toolkit-3.0.5.tar.gz", hash = "sha256:563d1a4140b63ff9dd587bda9557cffb2fe73650205ab6f4383092fb882e7dc8"}, + {file = "prompt_toolkit-3.0.8-py3-none-any.whl", hash = "sha256:7debb9a521e0b1ee7d2fe96ee4bd60ef03c6492784de0547337ca4433e46aa63"}, + {file = "prompt_toolkit-3.0.8.tar.gz", hash = "sha256:25c95d2ac813909f813c93fde734b6e44406d1477a9faef7c915ff37d39c0a8c"}, ] ptyprocess = [ {file = "ptyprocess-0.6.0-py2.py3-none-any.whl", hash = "sha256:d7cc528d76e76342423ca640335bd3633420dc1366f258cb31d05e865ef5ca1f"}, {file = "ptyprocess-0.6.0.tar.gz", hash = "sha256:923f299cc5ad920c68f2bc0bc98b75b9f838b93b599941a6b63ddbc2476394c0"}, ] py = [ - {file = "py-1.8.1-py2.py3-none-any.whl", hash = "sha256:c20fdd83a5dbc0af9efd622bee9a5564e278f6380fffcacc43ba6f43db2813b0"}, - {file = "py-1.8.1.tar.gz", hash = "sha256:5e27081401262157467ad6e7f851b7aa402c5852dbcb3dae06768434de5752aa"}, + {file = "py-1.9.0-py2.py3-none-any.whl", hash = "sha256:366389d1db726cd2fcfc79732e75410e5fe4d31db13692115529d34069a043c2"}, + {file = "py-1.9.0.tar.gz", hash = "sha256:9ca6883ce56b4e8da7e79ac18787889fa5206c79dcc67fb065376cd2fe03f342"}, ] pycodestyle = [ {file = "pycodestyle-2.6.0-py2.py3-none-any.whl", hash = "sha256:2295e7b2f6b5bd100585ebcb1f616591b652db8a741695b3d8f5d28bdc934367"}, @@ -1898,31 +2110,36 @@ pycparser = [ {file = "pycparser-2.20.tar.gz", hash = "sha256:2d475327684562c3a96cc71adf7dc8c4f0565175cf86b6d7a404ff4c771f15f0"}, ] pydantic = [ - {file = "pydantic-1.5.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:2a6904e9f18dea58f76f16b95cba6a2f20b72d787abd84ecd67ebc526e61dce6"}, - {file = "pydantic-1.5.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:da8099fca5ee339d5572cfa8af12cf0856ae993406f0b1eb9bb38c8a660e7416"}, - {file = "pydantic-1.5.1-cp36-cp36m-manylinux2014_i686.whl", hash = "sha256:68dece67bff2b3a5cc188258e46b49f676a722304f1c6148ae08e9291e284d98"}, - {file = "pydantic-1.5.1-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:ab863853cb502480b118187d670f753be65ec144e1654924bec33d63bc8b3ce2"}, - {file = "pydantic-1.5.1-cp36-cp36m-win_amd64.whl", hash = "sha256:2007eb062ed0e57875ce8ead12760a6e44bf5836e6a1a7ea81d71eeecf3ede0f"}, - {file = "pydantic-1.5.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:20a15a303ce1e4d831b4e79c17a4a29cb6740b12524f5bba3ea363bff65732bc"}, - {file = "pydantic-1.5.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:473101121b1bd454c8effc9fe66d54812fdc128184d9015c5aaa0d4e58a6d338"}, - {file = "pydantic-1.5.1-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:9be755919258d5d168aeffbe913ed6e8bd562e018df7724b68cabdee3371e331"}, - {file = "pydantic-1.5.1-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:b96ce81c4b5ca62ab81181212edfd057beaa41411cd9700fbcb48a6ba6564b4e"}, - {file = "pydantic-1.5.1-cp37-cp37m-win_amd64.whl", hash = "sha256:93b9f265329d9827f39f0fca68f5d72cc8321881cdc519a1304fa73b9f8a75bd"}, - {file = "pydantic-1.5.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e2c753d355126ddd1eefeb167fa61c7037ecd30b98e7ebecdc0d1da463b4ea09"}, - {file = "pydantic-1.5.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:8433dbb87246c0f562af75d00fa80155b74e4f6924b0db6a2078a3cd2f11c6c4"}, - {file = "pydantic-1.5.1-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:0a1cdf24e567d42dc762d3fed399bd211a13db2e8462af9dfa93b34c41648efb"}, - {file = "pydantic-1.5.1-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:8be325fc9da897029ee48d1b5e40df817d97fe969f3ac3fd2434ba7e198c55d5"}, - {file = "pydantic-1.5.1-cp38-cp38-win_amd64.whl", hash = "sha256:3714a4056f5bdbecf3a41e0706ec9b228c9513eee2ad884dc2c568c4dfa540e9"}, - {file = "pydantic-1.5.1-py36.py37.py38-none-any.whl", hash = "sha256:70f27d2f0268f490fe3de0a9b6fca7b7492b8fd6623f9fecd25b221ebee385e3"}, - {file = "pydantic-1.5.1.tar.gz", hash = "sha256:f0018613c7a0d19df3240c2a913849786f21b6539b9f23d85ce4067489dfacfa"}, + {file = "pydantic-1.7.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:dfaa6ed1d509b5aef4142084206584280bb6e9014f01df931ec6febdad5b200a"}, + {file = "pydantic-1.7.2-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:2182ba2a9290964b278bcc07a8d24207de709125d520efec9ad6fa6f92ee058d"}, + {file = "pydantic-1.7.2-cp36-cp36m-manylinux2014_i686.whl", hash = "sha256:0fe8b45d31ae53d74a6aa0bf801587bd49970070eac6a6326f9fa2a302703b8a"}, + {file = "pydantic-1.7.2-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:01f0291f4951580f320f7ae3f2ecaf0044cdebcc9b45c5f882a7e84453362420"}, + {file = "pydantic-1.7.2-cp36-cp36m-win_amd64.whl", hash = "sha256:4ba6b903e1b7bd3eb5df0e78d7364b7e831ed8b4cd781ebc3c4f1077fbcb72a4"}, + {file = "pydantic-1.7.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b11fc9530bf0698c8014b2bdb3bbc50243e82a7fa2577c8cfba660bcc819e768"}, + {file = "pydantic-1.7.2-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:a3c274c49930dc047a75ecc865e435f3df89715c775db75ddb0186804d9b04d0"}, + {file = "pydantic-1.7.2-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:c68b5edf4da53c98bb1ccb556ae8f655575cb2e676aef066c12b08c724a3f1a1"}, + {file = "pydantic-1.7.2-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:95d4410c4e429480c736bba0db6cce5aaa311304aea685ebcf9ee47571bfd7c8"}, + {file = "pydantic-1.7.2-cp37-cp37m-win_amd64.whl", hash = "sha256:a2fc7bf77ed4a7a961d7684afe177ff59971828141e608f142e4af858e07dddc"}, + {file = "pydantic-1.7.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b9572c0db13c8658b4a4cb705dcaae6983aeb9842248b36761b3fbc9010b740f"}, + {file = "pydantic-1.7.2-cp38-cp38-manylinux1_i686.whl", hash = "sha256:f83f679e727742b0c465e7ef992d6da4a7e5268b8edd8fdaf5303276374bef52"}, + {file = "pydantic-1.7.2-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:e5fece30e80087d9b7986104e2ac150647ec1658c4789c89893b03b100ca3164"}, + {file = "pydantic-1.7.2-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:ce2d452961352ba229fe1e0b925b41c0c37128f08dddb788d0fd73fd87ea0f66"}, + {file = "pydantic-1.7.2-cp38-cp38-win_amd64.whl", hash = "sha256:fc21a37ff3f545de80b166e1735c4172b41b017948a3fb2d5e2f03c219eac50a"}, + {file = "pydantic-1.7.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c9760d1556ec59ff745f88269a8f357e2b7afc75c556b3a87b8dda5bc62da8ba"}, + {file = "pydantic-1.7.2-cp39-cp39-manylinux1_i686.whl", hash = "sha256:2c1673633ad1eea78b1c5c420a47cd48717d2ef214c8230d96ca2591e9e00958"}, + {file = "pydantic-1.7.2-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:388c0c26c574ff49bad7d0fd6ed82fbccd86a0473fa3900397d3354c533d6ebb"}, + {file = "pydantic-1.7.2-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:ab1d5e4d8de00575957e1c982b951bffaedd3204ddd24694e3baca3332e53a23"}, + {file = "pydantic-1.7.2-cp39-cp39-win_amd64.whl", hash = "sha256:f045cf7afb3352a03bc6cb993578a34560ac24c5d004fa33c76efec6ada1361a"}, + {file = "pydantic-1.7.2-py3-none-any.whl", hash = "sha256:6665f7ab7fbbf4d3c1040925ff4d42d7549a8c15fe041164adfe4fc2134d4cce"}, + {file = "pydantic-1.7.2.tar.gz", hash = "sha256:c8200aecbd1fb914e1bd061d71a4d1d79ecb553165296af0c14989b89e90d09b"}, ] pyflakes = [ {file = "pyflakes-2.2.0-py2.py3-none-any.whl", hash = "sha256:0d94e0e05a19e57a99444b6ddcf9a6eb2e5c68d3ca1e98e90707af8152c90a92"}, {file = "pyflakes-2.2.0.tar.gz", hash = "sha256:35b2d75ee967ea93b55750aa9edbbf72813e06a66ba54438df2cfac9e3c27fc8"}, ] pygments = [ - {file = "Pygments-2.6.1-py3-none-any.whl", hash = "sha256:ff7a40b4860b727ab48fad6360eb351cc1b33cbf9b15a0f689ca5353e9463324"}, - {file = "Pygments-2.6.1.tar.gz", hash = "sha256:647344a061c249a3b74e230c739f434d7ea4d8b1d5f3721bc0f3558049b38f44"}, + {file = "Pygments-2.7.2-py3-none-any.whl", hash = "sha256:88a0bbcd659fcb9573703957c6b9cff9fab7295e6e76db54c9d00ae42df32773"}, + {file = "Pygments-2.7.2.tar.gz", hash = "sha256:381985fcc551eb9d37c52088a32914e00517e57f4a21609f48141ba08e193fa0"}, ] pylev = [ {file = "pylev-1.3.0-py2.py3-none-any.whl", hash = "sha256:1d29a87beb45ebe1e821e7a3b10da2b6b2f4c79b43f482c2df1a1f748a6e114e"}, @@ -1936,9 +2153,6 @@ pyparsing = [ {file = "pyparsing-2.4.7-py2.py3-none-any.whl", hash = "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"}, {file = "pyparsing-2.4.7.tar.gz", hash = "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1"}, ] -pyrsistent = [ - {file = "pyrsistent-0.14.11.tar.gz", hash = "sha256:3ca82748918eb65e2d89f222b702277099aca77e34843c5eb9d52451173970e2"}, -] pytest = [ {file = "pytest-5.4.3-py3-none-any.whl", hash = "sha256:5c0db86b698e8f170ba4582a492248919255fcd4c79b1ee64ace34301fb589a1"}, {file = "pytest-5.4.3.tar.gz", hash = "sha256:7979331bfcba207414f5e1263b5a0f8f521d0f457318836a7355531ed1a4c7d8"}, @@ -1948,16 +2162,16 @@ pytest-asyncio = [ {file = "pytest_asyncio-0.10.0-py3-none-any.whl", hash = "sha256:d734718e25cfc32d2bf78d346e99d33724deeba774cc4afdf491530c6184b63b"}, ] pytest-cov = [ - {file = "pytest-cov-2.10.0.tar.gz", hash = "sha256:1a629dc9f48e53512fcbfda6b07de490c374b0c83c55ff7a1720b3fccff0ac87"}, - {file = "pytest_cov-2.10.0-py2.py3-none-any.whl", hash = "sha256:6e6d18092dce6fad667cd7020deed816f858ad3b49d5b5e2b1cc1c97a4dba65c"}, + {file = "pytest-cov-2.10.1.tar.gz", hash = "sha256:47bd0ce14056fdd79f93e1713f88fad7bdcc583dcd7783da86ef2f085a0bb88e"}, + {file = "pytest_cov-2.10.1-py2.py3-none-any.whl", hash = "sha256:45ec2d5182f89a81fc3eb29e3d1ed3113b9e9a873bcddb2a71faaab066110191"}, ] pytest-html = [ {file = "pytest-html-2.1.1.tar.gz", hash = "sha256:6a4ac391e105e391208e3eb9bd294a60dd336447fd8e1acddff3a6de7f4e57c5"}, {file = "pytest_html-2.1.1-py2.py3-none-any.whl", hash = "sha256:9e4817e8be8ddde62e8653c8934d0f296b605da3d2277a052f762c56a8b32df2"}, ] pytest-metadata = [ - {file = "pytest-metadata-1.9.0.tar.gz", hash = "sha256:168d203abba8cabb65cf1b5fa675b0ba60dccbf1825d147960876a7e6f7c219c"}, - {file = "pytest_metadata-1.9.0-py2.py3-none-any.whl", hash = "sha256:91d09c0e367e93c63c98461e9960833f465bff53d00ed2f8ccf680205e5053a4"}, + {file = "pytest-metadata-1.10.0.tar.gz", hash = "sha256:b7e6e0a45adacb17a03a97bf7a2ef60cc1f4e172bcce9732ce5e814191932315"}, + {file = "pytest_metadata-1.10.0-py2.py3-none-any.whl", hash = "sha256:fcbcc5781aee450107c620c79c57e50796b6777b82b3c504be9cbc3017201169"}, ] pytest-mock = [ {file = "pytest-mock-2.0.0.tar.gz", hash = "sha256:b35eb281e93aafed138db25c8772b95d3756108b601947f89af503f8c629413f"}, @@ -1968,8 +2182,8 @@ pytest-mypy = [ {file = "pytest_mypy-0.4.2-py3-none-any.whl", hash = "sha256:3b7b56912d55439d5f447cc609f91caac7f74f0f1c89f1379d04f06bac777c32"}, ] pytz = [ - {file = "pytz-2020.1-py2.py3-none-any.whl", hash = "sha256:a494d53b6d39c3c6e44c3bec237336e14305e4f29bbf800b599253057fbb79ed"}, - {file = "pytz-2020.1.tar.gz", hash = "sha256:c35965d010ce31b23eeb663ed3cc8c906275d6be1a34393a1d73a41febf4a048"}, + {file = "pytz-2020.4-py2.py3-none-any.whl", hash = "sha256:5c55e189b682d420be27c6995ba6edce0c0a77dd67bfbe2ae6607134d5851ffd"}, + {file = "pytz-2020.4.tar.gz", hash = "sha256:3e6b7dd2d1e0a59084bcee14a17af60c5c562cdc16d828e8eba2e683d3a7e268"}, ] pywin32-ctypes = [ {file = "pywin32-ctypes-0.2.0.tar.gz", hash = "sha256:24ffc3b341d457d48e8922352130cf2644024a4ff09762a2261fd34c36ee5942"}, @@ -1989,39 +2203,59 @@ pyyaml = [ {file = "PyYAML-5.3.1.tar.gz", hash = "sha256:b8eac752c5e14d3eca0e6dd9199cd627518cb5ec06add0de9d32baeee6fe645d"}, ] regex = [ - {file = "regex-2020.6.8-cp27-cp27m-win32.whl", hash = "sha256:fbff901c54c22425a5b809b914a3bfaf4b9570eee0e5ce8186ac71eb2025191c"}, - {file = "regex-2020.6.8-cp27-cp27m-win_amd64.whl", hash = "sha256:112e34adf95e45158c597feea65d06a8124898bdeac975c9087fe71b572bd938"}, - {file = "regex-2020.6.8-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:92d8a043a4241a710c1cf7593f5577fbb832cf6c3a00ff3fc1ff2052aff5dd89"}, - {file = "regex-2020.6.8-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:bae83f2a56ab30d5353b47f9b2a33e4aac4de9401fb582b55c42b132a8ac3868"}, - {file = "regex-2020.6.8-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:b2ba0f78b3ef375114856cbdaa30559914d081c416b431f2437f83ce4f8b7f2f"}, - {file = "regex-2020.6.8-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:95fa7726d073c87141f7bbfb04c284901f8328e2d430eeb71b8ffdd5742a5ded"}, - {file = "regex-2020.6.8-cp36-cp36m-win32.whl", hash = "sha256:e3cdc9423808f7e1bb9c2e0bdb1c9dc37b0607b30d646ff6faf0d4e41ee8fee3"}, - {file = "regex-2020.6.8-cp36-cp36m-win_amd64.whl", hash = "sha256:c78e66a922de1c95a208e4ec02e2e5cf0bb83a36ceececc10a72841e53fbf2bd"}, - {file = "regex-2020.6.8-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:08997a37b221a3e27d68ffb601e45abfb0093d39ee770e4257bd2f5115e8cb0a"}, - {file = "regex-2020.6.8-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:2f6f211633ee8d3f7706953e9d3edc7ce63a1d6aad0be5dcee1ece127eea13ae"}, - {file = "regex-2020.6.8-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:55b4c25cbb3b29f8d5e63aeed27b49fa0f8476b0d4e1b3171d85db891938cc3a"}, - {file = "regex-2020.6.8-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:89cda1a5d3e33ec9e231ece7307afc101b5217523d55ef4dc7fb2abd6de71ba3"}, - {file = "regex-2020.6.8-cp37-cp37m-win32.whl", hash = "sha256:690f858d9a94d903cf5cada62ce069b5d93b313d7d05456dbcd99420856562d9"}, - {file = "regex-2020.6.8-cp37-cp37m-win_amd64.whl", hash = "sha256:1700419d8a18c26ff396b3b06ace315b5f2a6e780dad387e4c48717a12a22c29"}, - {file = "regex-2020.6.8-cp38-cp38-manylinux1_i686.whl", hash = "sha256:654cb773b2792e50151f0e22be0f2b6e1c3a04c5328ff1d9d59c0398d37ef610"}, - {file = "regex-2020.6.8-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:52e1b4bef02f4040b2fd547357a170fc1146e60ab310cdbdd098db86e929b387"}, - {file = "regex-2020.6.8-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:cf59bbf282b627130f5ba68b7fa3abdb96372b24b66bdf72a4920e8153fc7910"}, - {file = "regex-2020.6.8-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:5aaa5928b039ae440d775acea11d01e42ff26e1561c0ffcd3d805750973c6baf"}, - {file = "regex-2020.6.8-cp38-cp38-win32.whl", hash = "sha256:97712e0d0af05febd8ab63d2ef0ab2d0cd9deddf4476f7aa153f76feef4b2754"}, - {file = "regex-2020.6.8-cp38-cp38-win_amd64.whl", hash = "sha256:6ad8663c17db4c5ef438141f99e291c4d4edfeaacc0ce28b5bba2b0bf273d9b5"}, - {file = "regex-2020.6.8.tar.gz", hash = "sha256:e9b64e609d37438f7d6e68c2546d2cb8062f3adb27e6336bc129b51be20773ac"}, + {file = "regex-2020.11.13-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:8b882a78c320478b12ff024e81dc7d43c1462aa4a3341c754ee65d857a521f85"}, + {file = "regex-2020.11.13-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:a63f1a07932c9686d2d416fb295ec2c01ab246e89b4d58e5fa468089cab44b70"}, + {file = "regex-2020.11.13-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:6e4b08c6f8daca7d8f07c8d24e4331ae7953333dbd09c648ed6ebd24db5a10ee"}, + {file = "regex-2020.11.13-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:bba349276b126947b014e50ab3316c027cac1495992f10e5682dc677b3dfa0c5"}, + {file = "regex-2020.11.13-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:56e01daca75eae420bce184edd8bb341c8eebb19dd3bce7266332258f9fb9dd7"}, + {file = "regex-2020.11.13-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:6a8ce43923c518c24a2579fda49f093f1397dad5d18346211e46f134fc624e31"}, + {file = "regex-2020.11.13-cp36-cp36m-manylinux2014_i686.whl", hash = "sha256:1ab79fcb02b930de09c76d024d279686ec5d532eb814fd0ed1e0051eb8bd2daa"}, + {file = "regex-2020.11.13-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:9801c4c1d9ae6a70aeb2128e5b4b68c45d4f0af0d1535500884d644fa9b768c6"}, + {file = "regex-2020.11.13-cp36-cp36m-win32.whl", hash = "sha256:49cae022fa13f09be91b2c880e58e14b6da5d10639ed45ca69b85faf039f7a4e"}, + {file = "regex-2020.11.13-cp36-cp36m-win_amd64.whl", hash = "sha256:749078d1eb89484db5f34b4012092ad14b327944ee7f1c4f74d6279a6e4d1884"}, + {file = "regex-2020.11.13-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b2f4007bff007c96a173e24dcda236e5e83bde4358a557f9ccf5e014439eae4b"}, + {file = "regex-2020.11.13-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:38c8fd190db64f513fe4e1baa59fed086ae71fa45083b6936b52d34df8f86a88"}, + {file = "regex-2020.11.13-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:5862975b45d451b6db51c2e654990c1820523a5b07100fc6903e9c86575202a0"}, + {file = "regex-2020.11.13-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:262c6825b309e6485ec2493ffc7e62a13cf13fb2a8b6d212f72bd53ad34118f1"}, + {file = "regex-2020.11.13-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:bafb01b4688833e099d79e7efd23f99172f501a15c44f21ea2118681473fdba0"}, + {file = "regex-2020.11.13-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:e32f5f3d1b1c663af7f9c4c1e72e6ffe9a78c03a31e149259f531e0fed826512"}, + {file = "regex-2020.11.13-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:3bddc701bdd1efa0d5264d2649588cbfda549b2899dc8d50417e47a82e1387ba"}, + {file = "regex-2020.11.13-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:02951b7dacb123d8ea6da44fe45ddd084aa6777d4b2454fa0da61d569c6fa538"}, + {file = "regex-2020.11.13-cp37-cp37m-win32.whl", hash = "sha256:0d08e71e70c0237883d0bef12cad5145b84c3705e9c6a588b2a9c7080e5af2a4"}, + {file = "regex-2020.11.13-cp37-cp37m-win_amd64.whl", hash = "sha256:1fa7ee9c2a0e30405e21031d07d7ba8617bc590d391adfc2b7f1e8b99f46f444"}, + {file = "regex-2020.11.13-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:baf378ba6151f6e272824b86a774326f692bc2ef4cc5ce8d5bc76e38c813a55f"}, + {file = "regex-2020.11.13-cp38-cp38-manylinux1_i686.whl", hash = "sha256:e3faaf10a0d1e8e23a9b51d1900b72e1635c2d5b0e1bea1c18022486a8e2e52d"}, + {file = "regex-2020.11.13-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:2a11a3e90bd9901d70a5b31d7dd85114755a581a5da3fc996abfefa48aee78af"}, + {file = "regex-2020.11.13-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:d1ebb090a426db66dd80df8ca85adc4abfcbad8a7c2e9a5ec7513ede522e0a8f"}, + {file = "regex-2020.11.13-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:b2b1a5ddae3677d89b686e5c625fc5547c6e492bd755b520de5332773a8af06b"}, + {file = "regex-2020.11.13-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:2c99e97d388cd0a8d30f7c514d67887d8021541b875baf09791a3baad48bb4f8"}, + {file = "regex-2020.11.13-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:c084582d4215593f2f1d28b65d2a2f3aceff8342aa85afd7be23a9cad74a0de5"}, + {file = "regex-2020.11.13-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:a3d748383762e56337c39ab35c6ed4deb88df5326f97a38946ddd19028ecce6b"}, + {file = "regex-2020.11.13-cp38-cp38-win32.whl", hash = "sha256:7913bd25f4ab274ba37bc97ad0e21c31004224ccb02765ad984eef43e04acc6c"}, + {file = "regex-2020.11.13-cp38-cp38-win_amd64.whl", hash = "sha256:6c54ce4b5d61a7129bad5c5dc279e222afd00e721bf92f9ef09e4fae28755683"}, + {file = "regex-2020.11.13-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1862a9d9194fae76a7aaf0150d5f2a8ec1da89e8b55890b1786b8f88a0f619dc"}, + {file = "regex-2020.11.13-cp39-cp39-manylinux1_i686.whl", hash = "sha256:4902e6aa086cbb224241adbc2f06235927d5cdacffb2425c73e6570e8d862364"}, + {file = "regex-2020.11.13-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:7a25fcbeae08f96a754b45bdc050e1fb94b95cab046bf56b016c25e9ab127b3e"}, + {file = "regex-2020.11.13-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:d2d8ce12b7c12c87e41123997ebaf1a5767a5be3ec545f64675388970f415e2e"}, + {file = "regex-2020.11.13-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:f7d29a6fc4760300f86ae329e3b6ca28ea9c20823df123a2ea8693e967b29917"}, + {file = "regex-2020.11.13-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:717881211f46de3ab130b58ec0908267961fadc06e44f974466d1887f865bd5b"}, + {file = "regex-2020.11.13-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:3128e30d83f2e70b0bed9b2a34e92707d0877e460b402faca908c6667092ada9"}, + {file = "regex-2020.11.13-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:8f6a2229e8ad946e36815f2a03386bb8353d4bde368fdf8ca5f0cb97264d3b5c"}, + {file = "regex-2020.11.13-cp39-cp39-win32.whl", hash = "sha256:f8f295db00ef5f8bae530fc39af0b40486ca6068733fb860b42115052206466f"}, + {file = "regex-2020.11.13-cp39-cp39-win_amd64.whl", hash = "sha256:a15f64ae3a027b64496a71ab1f722355e570c3fac5ba2801cafce846bf5af01d"}, + {file = "regex-2020.11.13.tar.gz", hash = "sha256:83d6b356e116ca119db8e7c6fc2983289d87b27b3fac238cfe5dca529d884562"}, ] requests = [ - {file = "requests-2.23.0-py2.py3-none-any.whl", hash = "sha256:43999036bfa82904b6af1d99e4882b560e5e2c68e5c4b0aa03b655f3d7d73fee"}, - {file = "requests-2.23.0.tar.gz", hash = "sha256:b3f43d496c6daba4493e7c431722aeb7dbc6288f52a6e04e7b6023b0247817e6"}, + {file = "requests-2.25.0-py2.py3-none-any.whl", hash = "sha256:e786fa28d8c9154e6a4de5d46a1d921b8749f8b74e28bde23768e5e16eece998"}, + {file = "requests-2.25.0.tar.gz", hash = "sha256:7f1a0b932f4a60a1a65caa4263921bb7d9ee911957e0ae4a23a6dd08185ad5f8"}, ] requests-toolbelt = [ - {file = "requests-toolbelt-0.8.0.tar.gz", hash = "sha256:f6a531936c6fa4c6cfce1b9c10d5c4f498d16528d2a54a22ca00011205a187b5"}, - {file = "requests_toolbelt-0.8.0-py2.py3-none-any.whl", hash = "sha256:42c9c170abc2cacb78b8ab23ac957945c7716249206f90874651971a4acff237"}, + {file = "requests-toolbelt-0.9.1.tar.gz", hash = "sha256:968089d4584ad4ad7c171454f0a5c6dac23971e9472521ea3b6d49d610aa6fc0"}, + {file = "requests_toolbelt-0.9.1-py2.py3-none-any.whl", hash = "sha256:380606e1d10dc85c3bd47bf5a6095f815ec007be7a8b69c878507068df059e6f"}, ] secretstorage = [ - {file = "SecretStorage-3.1.2-py3-none-any.whl", hash = "sha256:b5ec909dde94d4ae2fa26af7c089036997030f0cf0a5cb372b4cccabd81c143b"}, - {file = "SecretStorage-3.1.2.tar.gz", hash = "sha256:15da8a989b65498e29be338b3b279965f1b8f09b9668bd8010da183024c8bff6"}, + {file = "SecretStorage-3.2.0-py3-none-any.whl", hash = "sha256:ed5279d788af258e4676fa26b6efb6d335a31f1f9f529b6f1e200f388fac33e1"}, + {file = "SecretStorage-3.2.0.tar.gz", hash = "sha256:46305c3847ee3f7252b284e0eee5590fa6341c891104a2fd2313f8798c615a82"}, ] shellingham = [ {file = "shellingham-1.3.2-py2.py3-none-any.whl", hash = "sha256:7f6206ae169dc1a03af8a138681b3f962ae61cc93ade84d0585cca3aaf770044"}, @@ -2031,32 +2265,112 @@ six = [ {file = "six-1.15.0-py2.py3-none-any.whl", hash = "sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced"}, {file = "six-1.15.0.tar.gz", hash = "sha256:30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259"}, ] +snowballstemmer = [ + {file = "snowballstemmer-2.0.0-py2.py3-none-any.whl", hash = "sha256:209f257d7533fdb3cb73bdbd24f436239ca3b2fa67d56f6ff88e86be08cc5ef0"}, + {file = "snowballstemmer-2.0.0.tar.gz", hash = "sha256:df3bac3df4c2c01363f3dd2cfa78cce2840a79b9f1c2d2de9ce8d31683992f52"}, +] +soupsieve = [ + {file = "soupsieve-2.0.1-py3-none-any.whl", hash = "sha256:1634eea42ab371d3d346309b93df7870a88610f0725d47528be902a0d95ecc55"}, + {file = "soupsieve-2.0.1.tar.gz", hash = "sha256:a59dc181727e95d25f781f0eb4fd1825ff45590ec8ff49eadfd7f1a537cc0232"}, +] +sphinx = [ + {file = "Sphinx-3.3.1-py3-none-any.whl", hash = "sha256:d4e59ad4ea55efbb3c05cde3bfc83bfc14f0c95aa95c3d75346fcce186a47960"}, + {file = "Sphinx-3.3.1.tar.gz", hash = "sha256:1e8d592225447104d1172be415bc2972bd1357e3e12fdc76edf2261105db4300"}, +] +sphinx-autobuild = [ + {file = "sphinx-autobuild-2020.9.1.tar.gz", hash = "sha256:4b184a7db893f2100bbd831991ae54ca89167a2b9ce68faea71eaa9e37716aed"}, + {file = "sphinx_autobuild-2020.9.1-py3-none-any.whl", hash = "sha256:df5c72cb8b8fc9b31279c4619780c4e95029be6de569ff60a8bb2e99d20f63dd"}, +] +sphinx-copybutton = [ + {file = "sphinx-copybutton-0.3.1.tar.gz", hash = "sha256:0e0461df394515284e3907e3f418a0c60ef6ab6c9a27a800c8552772d0a402a2"}, + {file = "sphinx_copybutton-0.3.1-py3-none-any.whl", hash = "sha256:5125c718e763596e6e52d92e15ee0d6f4800ad3817939be6dee51218870b3e3d"}, +] +sphinx-intl = [ + {file = "sphinx-intl-2.0.1.tar.gz", hash = "sha256:b25a6ec169347909e8d983eefe2d8adecb3edc2f27760db79b965c69950638b4"}, + {file = "sphinx_intl-2.0.1-py3.8.egg", hash = "sha256:2ff97cba0e4e43249e339a3c29dd2f5b63c25ce794050aabca320ad95f5c5b55"}, +] +sphinxcontrib-applehelp = [ + {file = "sphinxcontrib-applehelp-1.0.2.tar.gz", hash = "sha256:a072735ec80e7675e3f432fcae8610ecf509c5f1869d17e2eecff44389cdbc58"}, + {file = "sphinxcontrib_applehelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:806111e5e962be97c29ec4c1e7fe277bfd19e9652fb1a4392105b43e01af885a"}, +] +sphinxcontrib-devhelp = [ + {file = "sphinxcontrib-devhelp-1.0.2.tar.gz", hash = "sha256:ff7f1afa7b9642e7060379360a67e9c41e8f3121f2ce9164266f61b9f4b338e4"}, + {file = "sphinxcontrib_devhelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:8165223f9a335cc1af7ffe1ed31d2871f325254c0423bc0c4c7cd1c1e4734a2e"}, +] +sphinxcontrib-htmlhelp = [ + {file = "sphinxcontrib-htmlhelp-1.0.3.tar.gz", hash = "sha256:e8f5bb7e31b2dbb25b9cc435c8ab7a79787ebf7f906155729338f3156d93659b"}, + {file = "sphinxcontrib_htmlhelp-1.0.3-py2.py3-none-any.whl", hash = "sha256:3c0bc24a2c41e340ac37c85ced6dafc879ab485c095b1d65d2461ac2f7cca86f"}, +] +sphinxcontrib-jsmath = [ + {file = "sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8"}, + {file = "sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", hash = "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178"}, +] +sphinxcontrib-qthelp = [ + {file = "sphinxcontrib-qthelp-1.0.3.tar.gz", hash = "sha256:4c33767ee058b70dba89a6fc5c1892c0d57a54be67ddd3e7875a18d14cba5a72"}, + {file = "sphinxcontrib_qthelp-1.0.3-py2.py3-none-any.whl", hash = "sha256:bd9fc24bcb748a8d51fd4ecaade681350aa63009a347a8c14e637895444dfab6"}, +] +sphinxcontrib-serializinghtml = [ + {file = "sphinxcontrib-serializinghtml-1.1.4.tar.gz", hash = "sha256:eaa0eccc86e982a9b939b2b82d12cc5d013385ba5eadcc7e4fed23f4405f77bc"}, + {file = "sphinxcontrib_serializinghtml-1.1.4-py2.py3-none-any.whl", hash = "sha256:f242a81d423f59617a8e5cf16f5d4d74e28ee9a66f9e5b637a18082991db5a9a"}, +] toml = [ - {file = "toml-0.10.1-py2.py3-none-any.whl", hash = "sha256:bda89d5935c2eac546d648028b9901107a595863cb36bae0c73ac804a9b4ce88"}, - {file = "toml-0.10.1.tar.gz", hash = "sha256:926b612be1e5ce0634a2ca03470f95169cf16f939018233a670519cb4ac58b0f"}, + {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, + {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, ] tomlkit = [ - {file = "tomlkit-0.5.11-py2.py3-none-any.whl", hash = "sha256:4e1bd6c9197d984528f9ff0cc9db667c317d8881288db50db20eeeb0f6b0380b"}, - {file = "tomlkit-0.5.11.tar.gz", hash = "sha256:f044eda25647882e5ef22b43a1688fb6ab12af2fc50e8456cdfc751c873101cf"}, + {file = "tomlkit-0.7.0-py2.py3-none-any.whl", hash = "sha256:6babbd33b17d5c9691896b0e68159215a9387ebfa938aa3ac42f4a4beeb2b831"}, + {file = "tomlkit-0.7.0.tar.gz", hash = "sha256:ac57f29693fab3e309ea789252fcce3061e19110085aa31af5446ca749325618"}, ] tornado = [ - {file = "tornado-6.0.4-cp35-cp35m-win32.whl", hash = "sha256:5217e601700f24e966ddab689f90b7ea4bd91ff3357c3600fa1045e26d68e55d"}, - {file = "tornado-6.0.4-cp35-cp35m-win_amd64.whl", hash = "sha256:c98232a3ac391f5faea6821b53db8db461157baa788f5d6222a193e9456e1740"}, - {file = "tornado-6.0.4-cp36-cp36m-win32.whl", hash = "sha256:5f6a07e62e799be5d2330e68d808c8ac41d4a259b9cea61da4101b83cb5dc673"}, - {file = "tornado-6.0.4-cp36-cp36m-win_amd64.whl", hash = "sha256:c952975c8ba74f546ae6de2e226ab3cc3cc11ae47baf607459a6728585bb542a"}, - {file = "tornado-6.0.4-cp37-cp37m-win32.whl", hash = "sha256:2c027eb2a393d964b22b5c154d1a23a5f8727db6fda837118a776b29e2b8ebc6"}, - {file = "tornado-6.0.4-cp37-cp37m-win_amd64.whl", hash = "sha256:5618f72e947533832cbc3dec54e1dffc1747a5cb17d1fd91577ed14fa0dc081b"}, - {file = "tornado-6.0.4-cp38-cp38-win32.whl", hash = "sha256:22aed82c2ea340c3771e3babc5ef220272f6fd06b5108a53b4976d0d722bcd52"}, - {file = "tornado-6.0.4-cp38-cp38-win_amd64.whl", hash = "sha256:c58d56003daf1b616336781b26d184023ea4af13ae143d9dda65e31e534940b9"}, - {file = "tornado-6.0.4.tar.gz", hash = "sha256:0fe2d45ba43b00a41cd73f8be321a44936dc1aba233dee979f17a042b83eb6dc"}, + {file = "tornado-6.1-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:d371e811d6b156d82aa5f9a4e08b58debf97c302a35714f6f45e35139c332e32"}, + {file = "tornado-6.1-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:0d321a39c36e5f2c4ff12b4ed58d41390460f798422c4504e09eb5678e09998c"}, + {file = "tornado-6.1-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:9de9e5188a782be6b1ce866e8a51bc76a0fbaa0e16613823fc38e4fc2556ad05"}, + {file = "tornado-6.1-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:61b32d06ae8a036a6607805e6720ef00a3c98207038444ba7fd3d169cd998910"}, + {file = "tornado-6.1-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:3e63498f680547ed24d2c71e6497f24bca791aca2fe116dbc2bd0ac7f191691b"}, + {file = "tornado-6.1-cp35-cp35m-manylinux2014_aarch64.whl", hash = "sha256:6c77c9937962577a6a76917845d06af6ab9197702a42e1346d8ae2e76b5e3675"}, + {file = "tornado-6.1-cp35-cp35m-win32.whl", hash = "sha256:6286efab1ed6e74b7028327365cf7346b1d777d63ab30e21a0f4d5b275fc17d5"}, + {file = "tornado-6.1-cp35-cp35m-win_amd64.whl", hash = "sha256:fa2ba70284fa42c2a5ecb35e322e68823288a4251f9ba9cc77be04ae15eada68"}, + {file = "tornado-6.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:0a00ff4561e2929a2c37ce706cb8233b7907e0cdc22eab98888aca5dd3775feb"}, + {file = "tornado-6.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:748290bf9112b581c525e6e6d3820621ff020ed95af6f17fedef416b27ed564c"}, + {file = "tornado-6.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:e385b637ac3acaae8022e7e47dfa7b83d3620e432e3ecb9a3f7f58f150e50921"}, + {file = "tornado-6.1-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:25ad220258349a12ae87ede08a7b04aca51237721f63b1808d39bdb4b2164558"}, + {file = "tornado-6.1-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:65d98939f1a2e74b58839f8c4dab3b6b3c1ce84972ae712be02845e65391ac7c"}, + {file = "tornado-6.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:e519d64089b0876c7b467274468709dadf11e41d65f63bba207e04217f47c085"}, + {file = "tornado-6.1-cp36-cp36m-win32.whl", hash = "sha256:b87936fd2c317b6ee08a5741ea06b9d11a6074ef4cc42e031bc6403f82a32575"}, + {file = "tornado-6.1-cp36-cp36m-win_amd64.whl", hash = "sha256:cc0ee35043162abbf717b7df924597ade8e5395e7b66d18270116f8745ceb795"}, + {file = "tornado-6.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:7250a3fa399f08ec9cb3f7b1b987955d17e044f1ade821b32e5f435130250d7f"}, + {file = "tornado-6.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:ed3ad863b1b40cd1d4bd21e7498329ccaece75db5a5bf58cd3c9f130843e7102"}, + {file = "tornado-6.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:dcef026f608f678c118779cd6591c8af6e9b4155c44e0d1bc0c87c036fb8c8c4"}, + {file = "tornado-6.1-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:70dec29e8ac485dbf57481baee40781c63e381bebea080991893cd297742b8fd"}, + {file = "tornado-6.1-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:d3f7594930c423fd9f5d1a76bee85a2c36fd8b4b16921cae7e965f22575e9c01"}, + {file = "tornado-6.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:3447475585bae2e77ecb832fc0300c3695516a47d46cefa0528181a34c5b9d3d"}, + {file = "tornado-6.1-cp37-cp37m-win32.whl", hash = "sha256:e7229e60ac41a1202444497ddde70a48d33909e484f96eb0da9baf8dc68541df"}, + {file = "tornado-6.1-cp37-cp37m-win_amd64.whl", hash = "sha256:cb5ec8eead331e3bb4ce8066cf06d2dfef1bfb1b2a73082dfe8a161301b76e37"}, + {file = "tornado-6.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:20241b3cb4f425e971cb0a8e4ffc9b0a861530ae3c52f2b0434e6c1b57e9fd95"}, + {file = "tornado-6.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:c77da1263aa361938476f04c4b6c8916001b90b2c2fdd92d8d535e1af48fba5a"}, + {file = "tornado-6.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:fba85b6cd9c39be262fcd23865652920832b61583de2a2ca907dbd8e8a8c81e5"}, + {file = "tornado-6.1-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:1e8225a1070cd8eec59a996c43229fe8f95689cb16e552d130b9793cb570a288"}, + {file = "tornado-6.1-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:d14d30e7f46a0476efb0deb5b61343b1526f73ebb5ed84f23dc794bdb88f9d9f"}, + {file = "tornado-6.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:8f959b26f2634a091bb42241c3ed8d3cedb506e7c27b8dd5c7b9f745318ddbb6"}, + {file = "tornado-6.1-cp38-cp38-win32.whl", hash = "sha256:34ca2dac9e4d7afb0bed4677512e36a52f09caa6fded70b4e3e1c89dbd92c326"}, + {file = "tornado-6.1-cp38-cp38-win_amd64.whl", hash = "sha256:6196a5c39286cc37c024cd78834fb9345e464525d8991c21e908cc046d1cc02c"}, + {file = "tornado-6.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f0ba29bafd8e7e22920567ce0d232c26d4d47c8b5cf4ed7b562b5db39fa199c5"}, + {file = "tornado-6.1-cp39-cp39-manylinux1_i686.whl", hash = "sha256:33892118b165401f291070100d6d09359ca74addda679b60390b09f8ef325ffe"}, + {file = "tornado-6.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:7da13da6f985aab7f6f28debab00c67ff9cbacd588e8477034c0652ac141feea"}, + {file = "tornado-6.1-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:e0791ac58d91ac58f694d8d2957884df8e4e2f6687cdf367ef7eb7497f79eaa2"}, + {file = "tornado-6.1-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:66324e4e1beede9ac79e60f88de548da58b1f8ab4b2f1354d8375774f997e6c0"}, + {file = "tornado-6.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:a48900ecea1cbb71b8c71c620dee15b62f85f7c14189bdeee54966fbd9a0c5bd"}, + {file = "tornado-6.1-cp39-cp39-win32.whl", hash = "sha256:d3d20ea5782ba63ed13bc2b8c291a053c8d807a8fa927d941bd718468f7b950c"}, + {file = "tornado-6.1-cp39-cp39-win_amd64.whl", hash = "sha256:548430be2740e327b3fe0201abe471f314741efcb0067ec4f2d7dcfb4825f3e4"}, + {file = "tornado-6.1.tar.gz", hash = "sha256:33c6e81d7bd55b468d2e793517c909b139960b6c790a60b7991b9b6b76fb9791"}, ] tqdm = [ - {file = "tqdm-4.46.1-py2.py3-none-any.whl", hash = "sha256:07c06493f1403c1380b630ae3dcbe5ae62abcf369a93bbc052502279f189ab8c"}, - {file = "tqdm-4.46.1.tar.gz", hash = "sha256:cd140979c2bebd2311dfb14781d8f19bd5a9debb92dcab9f6ef899c987fcf71f"}, + {file = "tqdm-4.52.0-py2.py3-none-any.whl", hash = "sha256:80d9d5165d678dbd027dd102dfb99f71bf05f333b61fb761dbba13b4ab719ead"}, + {file = "tqdm-4.52.0.tar.gz", hash = "sha256:18d6a615aedd09ec8456d9524489dab330af4bd5c2a14a76eb3f9a0e14471afe"}, ] traitlets = [ - {file = "traitlets-4.3.3-py2.py3-none-any.whl", hash = "sha256:70b4c6a1d9019d7b4f6846832288f86998aa3b9207c6821f3578a6a6a467fe44"}, - {file = "traitlets-4.3.3.tar.gz", hash = "sha256:d023ee369ddd2763310e4c3eae1ff649689440d4ae59d7485eb4cfbbe3e359f7"}, + {file = "traitlets-5.0.5-py3-none-any.whl", hash = "sha256:69ff3f9d5351f31a7ad80443c2674b7099df13cc41fc5fa6e2f6d3b0330b0426"}, + {file = "traitlets-5.0.5.tar.gz", hash = "sha256:178f4ce988f69189f7e523337a3e11d91c786ded9360174a3d9ca83e79bc5396"}, ] typed-ast = [ {file = "typed_ast-1.4.1-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:73d785a950fc82dd2a25897d525d003f6378d1cb23ab305578394694202a58c3"}, @@ -2082,13 +2396,13 @@ typed-ast = [ {file = "typed_ast-1.4.1.tar.gz", hash = "sha256:8c8aaad94455178e3187ab22c8b01a3837f8ee50e09cf31f1ba129eb293ec30b"}, ] typing-extensions = [ - {file = "typing_extensions-3.7.4.2-py2-none-any.whl", hash = "sha256:f8d2bd89d25bc39dabe7d23df520442fa1d8969b82544370e03d88b5a591c392"}, - {file = "typing_extensions-3.7.4.2-py3-none-any.whl", hash = "sha256:6e95524d8a547a91e08f404ae485bbb71962de46967e1b71a0cb89af24e761c5"}, - {file = "typing_extensions-3.7.4.2.tar.gz", hash = "sha256:79ee589a3caca649a9bfd2a8de4709837400dfa00b6cc81962a1e6a1815969ae"}, + {file = "typing_extensions-3.7.4.3-py2-none-any.whl", hash = "sha256:dafc7639cde7f1b6e1acc0f457842a83e722ccca8eef5270af2d74792619a89f"}, + {file = "typing_extensions-3.7.4.3-py3-none-any.whl", hash = "sha256:7cb407020f00f7bfc3cb3e7881628838e69d8f3fcab2f64742a5e76b2f841918"}, + {file = "typing_extensions-3.7.4.3.tar.gz", hash = "sha256:99d4073b617d30288f569d3f13d2bd7548c3a7e4c8de87db09a9d29bb3a4a60c"}, ] urllib3 = [ - {file = "urllib3-1.25.9-py2.py3-none-any.whl", hash = "sha256:88206b0eb87e6d677d424843ac5209e3fb9d0190d0ee169599165ec25e9d9115"}, - {file = "urllib3-1.25.9.tar.gz", hash = "sha256:3018294ebefce6572a474f0604c2021e33b3fd8006ecd11d62107a5d2a963527"}, + {file = "urllib3-1.26.2-py2.py3-none-any.whl", hash = "sha256:d8ff90d979214d7b4f8ce956e80f4028fc6860e4431f731ea4a8c08f23f99473"}, + {file = "urllib3-1.26.2.tar.gz", hash = "sha256:19188f96923873c92ccb987120ec4acaa12f0461fa9ce5d3d0772bc965a39e08"}, ] uvloop = [ {file = "uvloop-0.14.0-cp35-cp35m-macosx_10_11_x86_64.whl", hash = "sha256:08b109f0213af392150e2fe6f81d33261bb5ce968a288eb698aad4f46eb711bd"}, @@ -2102,37 +2416,57 @@ uvloop = [ {file = "uvloop-0.14.0.tar.gz", hash = "sha256:123ac9c0c7dd71464f58f1b4ee0bbd81285d96cdda8bc3519281b8973e3a461e"}, ] virtualenv = [ - {file = "virtualenv-20.0.23-py2.py3-none-any.whl", hash = "sha256:ccfb8e1e05a1174f7bd4c163700277ba730496094fe1a58bea9d4ac140a207c8"}, - {file = "virtualenv-20.0.23.tar.gz", hash = "sha256:5102fbf1ec57e80671ef40ed98a84e980a71194cedf30c87c2b25c3a9e0b0107"}, + {file = "virtualenv-20.1.0-py2.py3-none-any.whl", hash = "sha256:b0011228208944ce71052987437d3843e05690b2f23d1c7da4263fde104c97a2"}, + {file = "virtualenv-20.1.0.tar.gz", hash = "sha256:b8d6110f493af256a40d65e29846c69340a947669eec8ce784fcf3dd3af28380"}, ] wcwidth = [ - {file = "wcwidth-0.2.4-py2.py3-none-any.whl", hash = "sha256:79375666b9954d4a1a10739315816324c3e73110af9d0e102d906fdb0aec009f"}, - {file = "wcwidth-0.2.4.tar.gz", hash = "sha256:8c6b5b6ee1360b842645f336d9e5d68c55817c26d3050f46b235ef2bc650e48f"}, + {file = "wcwidth-0.2.5-py2.py3-none-any.whl", hash = "sha256:beb4802a9cebb9144e99086eff703a642a13d6a0052920003a230f3294bbe784"}, + {file = "wcwidth-0.2.5.tar.gz", hash = "sha256:c4d647b99872929fdb7bdcaa4fbe7f01413ed3d98077df798530e5b04f116c83"}, ] webencodings = [ {file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"}, {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"}, ] yarl = [ - {file = "yarl-1.4.2-cp35-cp35m-macosx_10_13_x86_64.whl", hash = "sha256:3ce3d4f7c6b69c4e4f0704b32eca8123b9c58ae91af740481aa57d7857b5e41b"}, - {file = "yarl-1.4.2-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:a4844ebb2be14768f7994f2017f70aca39d658a96c786211be5ddbe1c68794c1"}, - {file = "yarl-1.4.2-cp35-cp35m-win32.whl", hash = "sha256:d8cdee92bc930d8b09d8bd2043cedd544d9c8bd7436a77678dd602467a993080"}, - {file = "yarl-1.4.2-cp35-cp35m-win_amd64.whl", hash = "sha256:c2b509ac3d4b988ae8769901c66345425e361d518aecbe4acbfc2567e416626a"}, - {file = "yarl-1.4.2-cp36-cp36m-macosx_10_13_x86_64.whl", hash = "sha256:308b98b0c8cd1dfef1a0311dc5e38ae8f9b58349226aa0533f15a16717ad702f"}, - {file = "yarl-1.4.2-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:944494be42fa630134bf907714d40207e646fd5a94423c90d5b514f7b0713fea"}, - {file = "yarl-1.4.2-cp36-cp36m-win32.whl", hash = "sha256:5b10eb0e7f044cf0b035112446b26a3a2946bca9d7d7edb5e54a2ad2f6652abb"}, - {file = "yarl-1.4.2-cp36-cp36m-win_amd64.whl", hash = "sha256:a161de7e50224e8e3de6e184707476b5a989037dcb24292b391a3d66ff158e70"}, - {file = "yarl-1.4.2-cp37-cp37m-macosx_10_13_x86_64.whl", hash = "sha256:26d7c90cb04dee1665282a5d1a998defc1a9e012fdca0f33396f81508f49696d"}, - {file = "yarl-1.4.2-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:0c2ab325d33f1b824734b3ef51d4d54a54e0e7a23d13b86974507602334c2cce"}, - {file = "yarl-1.4.2-cp37-cp37m-win32.whl", hash = "sha256:e15199cdb423316e15f108f51249e44eb156ae5dba232cb73be555324a1d49c2"}, - {file = "yarl-1.4.2-cp37-cp37m-win_amd64.whl", hash = "sha256:2098a4b4b9d75ee352807a95cdf5f10180db903bc5b7270715c6bbe2551f64ce"}, - {file = "yarl-1.4.2-cp38-cp38-macosx_10_13_x86_64.whl", hash = "sha256:c9959d49a77b0e07559e579f38b2f3711c2b8716b8410b320bf9713013215a1b"}, - {file = "yarl-1.4.2-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:25e66e5e2007c7a39541ca13b559cd8ebc2ad8fe00ea94a2aad28a9b1e44e5ae"}, - {file = "yarl-1.4.2-cp38-cp38-win32.whl", hash = "sha256:6faa19d3824c21bcbfdfce5171e193c8b4ddafdf0ac3f129ccf0cdfcb083e462"}, - {file = "yarl-1.4.2-cp38-cp38-win_amd64.whl", hash = "sha256:0ca2f395591bbd85ddd50a82eb1fde9c1066fafe888c5c7cc1d810cf03fd3cc6"}, - {file = "yarl-1.4.2.tar.gz", hash = "sha256:58cd9c469eced558cd81aa3f484b2924e8897049e06889e8ff2510435b7ef74b"}, + {file = "yarl-1.6.3-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:0355a701b3998dcd832d0dc47cc5dedf3874f966ac7f870e0f3a6788d802d434"}, + {file = "yarl-1.6.3-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:bafb450deef6861815ed579c7a6113a879a6ef58aed4c3a4be54400ae8871478"}, + {file = "yarl-1.6.3-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:547f7665ad50fa8563150ed079f8e805e63dd85def6674c97efd78eed6c224a6"}, + {file = "yarl-1.6.3-cp36-cp36m-manylinux2014_i686.whl", hash = "sha256:63f90b20ca654b3ecc7a8d62c03ffa46999595f0167d6450fa8383bab252987e"}, + {file = "yarl-1.6.3-cp36-cp36m-manylinux2014_ppc64le.whl", hash = "sha256:97b5bdc450d63c3ba30a127d018b866ea94e65655efaf889ebeabc20f7d12406"}, + {file = "yarl-1.6.3-cp36-cp36m-manylinux2014_s390x.whl", hash = "sha256:d8d07d102f17b68966e2de0e07bfd6e139c7c02ef06d3a0f8d2f0f055e13bb76"}, + {file = "yarl-1.6.3-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:15263c3b0b47968c1d90daa89f21fcc889bb4b1aac5555580d74565de6836366"}, + {file = "yarl-1.6.3-cp36-cp36m-win32.whl", hash = "sha256:b5dfc9a40c198334f4f3f55880ecf910adebdcb2a0b9a9c23c9345faa9185721"}, + {file = "yarl-1.6.3-cp36-cp36m-win_amd64.whl", hash = "sha256:b2e9a456c121e26d13c29251f8267541bd75e6a1ccf9e859179701c36a078643"}, + {file = "yarl-1.6.3-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:ce3beb46a72d9f2190f9e1027886bfc513702d748047b548b05dab7dfb584d2e"}, + {file = "yarl-1.6.3-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:2ce4c621d21326a4a5500c25031e102af589edb50c09b321049e388b3934eec3"}, + {file = "yarl-1.6.3-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:d26608cf178efb8faa5ff0f2d2e77c208f471c5a3709e577a7b3fd0445703ac8"}, + {file = "yarl-1.6.3-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:4c5bcfc3ed226bf6419f7a33982fb4b8ec2e45785a0561eb99274ebbf09fdd6a"}, + {file = "yarl-1.6.3-cp37-cp37m-manylinux2014_ppc64le.whl", hash = "sha256:4736eaee5626db8d9cda9eb5282028cc834e2aeb194e0d8b50217d707e98bb5c"}, + {file = "yarl-1.6.3-cp37-cp37m-manylinux2014_s390x.whl", hash = "sha256:68dc568889b1c13f1e4745c96b931cc94fdd0defe92a72c2b8ce01091b22e35f"}, + {file = "yarl-1.6.3-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:7356644cbed76119d0b6bd32ffba704d30d747e0c217109d7979a7bc36c4d970"}, + {file = "yarl-1.6.3-cp37-cp37m-win32.whl", hash = "sha256:00d7ad91b6583602eb9c1d085a2cf281ada267e9a197e8b7cae487dadbfa293e"}, + {file = "yarl-1.6.3-cp37-cp37m-win_amd64.whl", hash = "sha256:69ee97c71fee1f63d04c945f56d5d726483c4762845400a6795a3b75d56b6c50"}, + {file = "yarl-1.6.3-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:e46fba844f4895b36f4c398c5af062a9808d1f26b2999c58909517384d5deda2"}, + {file = "yarl-1.6.3-cp38-cp38-manylinux1_i686.whl", hash = "sha256:31ede6e8c4329fb81c86706ba8f6bf661a924b53ba191b27aa5fcee5714d18ec"}, + {file = "yarl-1.6.3-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:fcbb48a93e8699eae920f8d92f7160c03567b421bc17362a9ffbbd706a816f71"}, + {file = "yarl-1.6.3-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:72a660bdd24497e3e84f5519e57a9ee9220b6f3ac4d45056961bf22838ce20cc"}, + {file = "yarl-1.6.3-cp38-cp38-manylinux2014_ppc64le.whl", hash = "sha256:324ba3d3c6fee56e2e0b0d09bf5c73824b9f08234339d2b788af65e60040c959"}, + {file = "yarl-1.6.3-cp38-cp38-manylinux2014_s390x.whl", hash = "sha256:e6b5460dc5ad42ad2b36cca524491dfcaffbfd9c8df50508bddc354e787b8dc2"}, + {file = "yarl-1.6.3-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:6d6283d8e0631b617edf0fd726353cb76630b83a089a40933043894e7f6721e2"}, + {file = "yarl-1.6.3-cp38-cp38-win32.whl", hash = "sha256:9ede61b0854e267fd565e7527e2f2eb3ef8858b301319be0604177690e1a3896"}, + {file = "yarl-1.6.3-cp38-cp38-win_amd64.whl", hash = "sha256:f0b059678fd549c66b89bed03efcabb009075bd131c248ecdf087bdb6faba24a"}, + {file = "yarl-1.6.3-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:329412812ecfc94a57cd37c9d547579510a9e83c516bc069470db5f75684629e"}, + {file = "yarl-1.6.3-cp39-cp39-manylinux1_i686.whl", hash = "sha256:c49ff66d479d38ab863c50f7bb27dee97c6627c5fe60697de15529da9c3de724"}, + {file = "yarl-1.6.3-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:f040bcc6725c821a4c0665f3aa96a4d0805a7aaf2caf266d256b8ed71b9f041c"}, + {file = "yarl-1.6.3-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:d5c32c82990e4ac4d8150fd7652b972216b204de4e83a122546dce571c1bdf25"}, + {file = "yarl-1.6.3-cp39-cp39-manylinux2014_ppc64le.whl", hash = "sha256:d597767fcd2c3dc49d6eea360c458b65643d1e4dbed91361cf5e36e53c1f8c96"}, + {file = "yarl-1.6.3-cp39-cp39-manylinux2014_s390x.whl", hash = "sha256:8aa3decd5e0e852dc68335abf5478a518b41bf2ab2f330fe44916399efedfae0"}, + {file = "yarl-1.6.3-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:73494d5b71099ae8cb8754f1df131c11d433b387efab7b51849e7e1e851f07a4"}, + {file = "yarl-1.6.3-cp39-cp39-win32.whl", hash = "sha256:5b883e458058f8d6099e4420f0cc2567989032b5f34b271c0827de9f1079a424"}, + {file = "yarl-1.6.3-cp39-cp39-win_amd64.whl", hash = "sha256:4953fb0b4fdb7e08b2f3b3be80a00d28c5c8a2056bb066169de00e6501b986b6"}, + {file = "yarl-1.6.3.tar.gz", hash = "sha256:8a9066529240171b68893d60dca86a763eae2139dd42f42106b03cf4b426bf10"}, ] zipp = [ - {file = "zipp-3.1.0-py3-none-any.whl", hash = "sha256:aa36550ff0c0b7ef7fa639055d797116ee891440eac1a56f378e2d3179e0320b"}, - {file = "zipp-3.1.0.tar.gz", hash = "sha256:c599e4d75c98f6798c509911d08a22e6c021d074469042177c8c86fb92eefd96"}, + {file = "zipp-3.4.0-py3-none-any.whl", hash = "sha256:102c24ef8f171fd729d46599845e95c7ab894a4cf45f5de11a44cc7444fb1108"}, + {file = "zipp-3.4.0.tar.gz", hash = "sha256:ed5eee1974372595f9e416cc7bbeeb12335201d8081ca8a0743c954d4446e5cb"}, ] diff --git a/pyproject.toml b/pyproject.toml index f6558956..fb1ab2f1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -73,9 +73,8 @@ poetry = "^1.0.5" furo = "^2020.11.15-beta.17" sphinx = "^3.1.0" sphinx-intl = "^2.0.1" -sphinx-reload = "^0.2.0" -sphinx-rtd-theme = "^0.4.3" -Sphinx-Substitution-Extensions = "^2020.5.30" +sphinx-autobuild = "^2020.9.1" +sphinx-copybutton = "^0.3.1" [tool.poetry.extras] fast = ["uvloop"] diff --git a/tests/mocked_bot.py b/tests/mocked_bot.py index d83d5a86..aee31398 100644 --- a/tests/mocked_bot.py +++ b/tests/mocked_bot.py @@ -3,9 +3,9 @@ from typing import TYPE_CHECKING, AsyncGenerator, Deque, Optional, Type from aiogram import Bot from aiogram.client.session.base import BaseSession -from aiogram.api.methods import TelegramMethod -from aiogram.api.methods.base import Request, Response, T -from aiogram.api.types import UNSET +from aiogram.methods import TelegramMethod +from aiogram.methods.base import Request, Response, T +from aiogram.types import UNSET class MockedSession(BaseSession): diff --git a/tests/test_api/test_client/test_api_server.py b/tests/test_api/test_client/test_api_server.py index 74b6a785..d7f7025d 100644 --- a/tests/test_api/test_client/test_api_server.py +++ b/tests/test_api/test_client/test_api_server.py @@ -1,4 +1,4 @@ -from aiogram.api.client.telegram import PRODUCTION +from aiogram.client.telegram import PRODUCTION class TestAPIServer: diff --git a/tests/test_api/test_client/test_bot.py b/tests/test_api/test_client/test_bot.py index ba7dccb9..0cf444ad 100644 --- a/tests/test_api/test_client/test_bot.py +++ b/tests/test_api/test_client/test_bot.py @@ -6,8 +6,8 @@ from aresponses import ResponsesMockServer from aiogram import Bot from aiogram.client.session.aiohttp import AiohttpSession -from aiogram.api.methods import GetFile, GetMe -from aiogram.api.types import File, PhotoSize +from aiogram.methods import GetFile, GetMe +from aiogram.types import File, PhotoSize from tests.mocked_bot import MockedBot try: @@ -38,7 +38,7 @@ class TestBot: method = GetMe() with patch( - "aiogram.api.client.session.aiohttp.AiohttpSession.make_request", + "aiogram.client.session.aiohttp.AiohttpSession.make_request", new_callable=CoroutineMock, ) as mocked_make_request: await bot(method) @@ -51,16 +51,16 @@ class TestBot: await session.create_session() with patch( - "aiogram.api.client.session.aiohttp.AiohttpSession.close", new_callable=CoroutineMock + "aiogram.client.session.aiohttp.AiohttpSession.close", new_callable=CoroutineMock ) as mocked_close: - await bot.close() + await bot.session.close() mocked_close.assert_awaited() @pytest.mark.asyncio @pytest.mark.parametrize("close", [True, False]) async def test_context_manager(self, close: bool): with patch( - "aiogram.api.client.session.aiohttp.AiohttpSession.close", new_callable=CoroutineMock + "aiogram.client.session.aiohttp.AiohttpSession.close", new_callable=CoroutineMock ) as mocked_close: async with Bot("42:TEST", session=AiohttpSession()).context(auto_close=close) as bot: assert isinstance(bot, Bot) diff --git a/tests/test_api/test_client/test_session/test_aiohttp_session.py b/tests/test_api/test_client/test_session/test_aiohttp_session.py index c7951a1d..c5759244 100644 --- a/tests/test_api/test_client/test_session/test_aiohttp_session.py +++ b/tests/test_api/test_client/test_session/test_aiohttp_session.py @@ -7,8 +7,8 @@ from aresponses import ResponsesMockServer from aiogram import Bot from aiogram.client.session.aiohttp import AiohttpSession -from aiogram.api.methods import Request, TelegramMethod -from aiogram.api.types import InputFile +from aiogram.methods import Request, TelegramMethod +from aiogram.types import InputFile from tests.mocked_bot import MockedBot try: @@ -171,7 +171,7 @@ class TestAiohttpSession: call = TestMethod() with patch( - "aiogram.api.client.session.base.BaseSession.raise_for_status" + "aiogram.client.session.base.BaseSession.raise_for_status" ) as patched_raise_for_status: result = await session.make_request(bot, call) assert isinstance(result, int) @@ -205,10 +205,10 @@ class TestAiohttpSession: assert isinstance(session, AsyncContextManager) with patch( - "aiogram.api.client.session.aiohttp.AiohttpSession.create_session", + "aiogram.client.session.aiohttp.AiohttpSession.create_session", new_callable=CoroutineMock, ) as mocked_create_session, patch( - "aiogram.api.client.session.aiohttp.AiohttpSession.close", new_callable=CoroutineMock + "aiogram.client.session.aiohttp.AiohttpSession.close", new_callable=CoroutineMock ) as mocked_close: async with session as ctx: assert session == ctx 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 46c1b3f3..ba0e8e1e 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 @@ -5,9 +5,9 @@ from typing import AsyncContextManager, AsyncGenerator, Optional import pytest from aiogram.client.session.base import BaseSession, T -from aiogram.api.client.telegram import PRODUCTION, TelegramAPIServer -from aiogram.api.methods import GetMe, Response, TelegramMethod -from aiogram.api.types import UNSET +from aiogram.client.telegram import PRODUCTION, TelegramAPIServer +from aiogram.methods import GetMe, Response, TelegramMethod +from aiogram.types import UNSET try: from asynctest import CoroutineMock, patch diff --git a/tests/test_api/test_methods/test_add_sticker_to_set.py b/tests/test_api/test_methods/test_add_sticker_to_set.py index 8c91423e..dae220cc 100644 --- a/tests/test_api/test_methods/test_add_sticker_to_set.py +++ b/tests/test_api/test_methods/test_add_sticker_to_set.py @@ -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 diff --git a/tests/test_api/test_methods/test_answer_callback_query.py b/tests/test_api/test_methods/test_answer_callback_query.py index d2617b38..c3749455 100644 --- a/tests/test_api/test_methods/test_answer_callback_query.py +++ b/tests/test_api/test_methods/test_answer_callback_query.py @@ -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 diff --git a/tests/test_api/test_methods/test_answer_inline_query.py b/tests/test_api/test_methods/test_answer_inline_query.py index 950502c9..a843a59d 100644 --- a/tests/test_api/test_methods/test_answer_inline_query.py +++ b/tests/test_api/test_methods/test_answer_inline_query.py @@ -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 diff --git a/tests/test_api/test_methods/test_answer_pre_checkout_query.py b/tests/test_api/test_methods/test_answer_pre_checkout_query.py index 0d49e8e5..b1afa384 100644 --- a/tests/test_api/test_methods/test_answer_pre_checkout_query.py +++ b/tests/test_api/test_methods/test_answer_pre_checkout_query.py @@ -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 diff --git a/tests/test_api/test_methods/test_answer_shipping_query.py b/tests/test_api/test_methods/test_answer_shipping_query.py index 9a0f1a9e..bba639a3 100644 --- a/tests/test_api/test_methods/test_answer_shipping_query.py +++ b/tests/test_api/test_methods/test_answer_shipping_query.py @@ -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 diff --git a/tests/test_api/test_methods/test_base.py b/tests/test_api/test_methods/test_base.py index 3fd46078..079721a3 100644 --- a/tests/test_api/test_methods/test_base.py +++ b/tests/test_api/test_methods/test_base.py @@ -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 diff --git a/tests/test_api/test_methods/test_create_new_sticker_set.py b/tests/test_api/test_methods/test_create_new_sticker_set.py index 17b8b049..218bff0d 100644 --- a/tests/test_api/test_methods/test_create_new_sticker_set.py +++ b/tests/test_api/test_methods/test_create_new_sticker_set.py @@ -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 diff --git a/tests/test_api/test_methods/test_delete_chat_photo.py b/tests/test_api/test_methods/test_delete_chat_photo.py index 293a7b0e..c807bd71 100644 --- a/tests/test_api/test_methods/test_delete_chat_photo.py +++ b/tests/test_api/test_methods/test_delete_chat_photo.py @@ -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 diff --git a/tests/test_api/test_methods/test_delete_chat_sticker_set.py b/tests/test_api/test_methods/test_delete_chat_sticker_set.py index 618903ec..80d0967d 100644 --- a/tests/test_api/test_methods/test_delete_chat_sticker_set.py +++ b/tests/test_api/test_methods/test_delete_chat_sticker_set.py @@ -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 diff --git a/tests/test_api/test_methods/test_delete_message.py b/tests/test_api/test_methods/test_delete_message.py index 0b510abd..87b8efad 100644 --- a/tests/test_api/test_methods/test_delete_message.py +++ b/tests/test_api/test_methods/test_delete_message.py @@ -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 diff --git a/tests/test_api/test_methods/test_delete_sticker_from_set.py b/tests/test_api/test_methods/test_delete_sticker_from_set.py index 8b344225..350e0b3e 100644 --- a/tests/test_api/test_methods/test_delete_sticker_from_set.py +++ b/tests/test_api/test_methods/test_delete_sticker_from_set.py @@ -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 diff --git a/tests/test_api/test_methods/test_delete_webhook.py b/tests/test_api/test_methods/test_delete_webhook.py index 22c4d5c9..91ecb809 100644 --- a/tests/test_api/test_methods/test_delete_webhook.py +++ b/tests/test_api/test_methods/test_delete_webhook.py @@ -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 diff --git a/tests/test_api/test_methods/test_edit_message_caption.py b/tests/test_api/test_methods/test_edit_message_caption.py index 50fcf838..62803d43 100644 --- a/tests/test_api/test_methods/test_edit_message_caption.py +++ b/tests/test_api/test_methods/test_edit_message_caption.py @@ -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 diff --git a/tests/test_api/test_methods/test_edit_message_live_location.py b/tests/test_api/test_methods/test_edit_message_live_location.py index 96e566ac..db04fb19 100644 --- a/tests/test_api/test_methods/test_edit_message_live_location.py +++ b/tests/test_api/test_methods/test_edit_message_live_location.py @@ -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 diff --git a/tests/test_api/test_methods/test_edit_message_media.py b/tests/test_api/test_methods/test_edit_message_media.py index 882ae98a..c6715163 100644 --- a/tests/test_api/test_methods/test_edit_message_media.py +++ b/tests/test_api/test_methods/test_edit_message_media.py @@ -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 diff --git a/tests/test_api/test_methods/test_edit_message_reply_markup.py b/tests/test_api/test_methods/test_edit_message_reply_markup.py index 48f69e2a..474f052a 100644 --- a/tests/test_api/test_methods/test_edit_message_reply_markup.py +++ b/tests/test_api/test_methods/test_edit_message_reply_markup.py @@ -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 diff --git a/tests/test_api/test_methods/test_edit_message_text.py b/tests/test_api/test_methods/test_edit_message_text.py index 0e349a03..d889e7ec 100644 --- a/tests/test_api/test_methods/test_edit_message_text.py +++ b/tests/test_api/test_methods/test_edit_message_text.py @@ -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 diff --git a/tests/test_api/test_methods/test_export_chat_invite_link.py b/tests/test_api/test_methods/test_export_chat_invite_link.py index 8e76e907..2d5f6d05 100644 --- a/tests/test_api/test_methods/test_export_chat_invite_link.py +++ b/tests/test_api/test_methods/test_export_chat_invite_link.py @@ -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 diff --git a/tests/test_api/test_methods/test_forward_message.py b/tests/test_api/test_methods/test_forward_message.py index 3e2ae0d9..77adb37d 100644 --- a/tests/test_api/test_methods/test_forward_message.py +++ b/tests/test_api/test_methods/test_forward_message.py @@ -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 diff --git a/tests/test_api/test_methods/test_get_chat.py b/tests/test_api/test_methods/test_get_chat.py index d88b5261..3d9510b9 100644 --- a/tests/test_api/test_methods/test_get_chat.py +++ b/tests/test_api/test_methods/test_get_chat.py @@ -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 diff --git a/tests/test_api/test_methods/test_get_chat_administrators.py b/tests/test_api/test_methods/test_get_chat_administrators.py index f5e76c2e..9309460b 100644 --- a/tests/test_api/test_methods/test_get_chat_administrators.py +++ b/tests/test_api/test_methods/test_get_chat_administrators.py @@ -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 diff --git a/tests/test_api/test_methods/test_get_chat_member.py b/tests/test_api/test_methods/test_get_chat_member.py index d63bdbd0..111b06cd 100644 --- a/tests/test_api/test_methods/test_get_chat_member.py +++ b/tests/test_api/test_methods/test_get_chat_member.py @@ -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 diff --git a/tests/test_api/test_methods/test_get_chat_members_count.py b/tests/test_api/test_methods/test_get_chat_members_count.py index 1ae1a6e7..fd88f925 100644 --- a/tests/test_api/test_methods/test_get_chat_members_count.py +++ b/tests/test_api/test_methods/test_get_chat_members_count.py @@ -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 diff --git a/tests/test_api/test_methods/test_get_file.py b/tests/test_api/test_methods/test_get_file.py index 1b8fe22a..f466ef04 100644 --- a/tests/test_api/test_methods/test_get_file.py +++ b/tests/test_api/test_methods/test_get_file.py @@ -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 diff --git a/tests/test_api/test_methods/test_get_game_high_scores.py b/tests/test_api/test_methods/test_get_game_high_scores.py index efeac5cb..397b450d 100644 --- a/tests/test_api/test_methods/test_get_game_high_scores.py +++ b/tests/test_api/test_methods/test_get_game_high_scores.py @@ -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 diff --git a/tests/test_api/test_methods/test_get_me.py b/tests/test_api/test_methods/test_get_me.py index bd1bb860..9e6454e3 100644 --- a/tests/test_api/test_methods/test_get_me.py +++ b/tests/test_api/test_methods/test_get_me.py @@ -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 diff --git a/tests/test_api/test_methods/test_get_my_commands.py b/tests/test_api/test_methods/test_get_my_commands.py index 0cca2287..569a13a3 100644 --- a/tests/test_api/test_methods/test_get_my_commands.py +++ b/tests/test_api/test_methods/test_get_my_commands.py @@ -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 diff --git a/tests/test_api/test_methods/test_get_sticker_set.py b/tests/test_api/test_methods/test_get_sticker_set.py index 130de89a..8b331982 100644 --- a/tests/test_api/test_methods/test_get_sticker_set.py +++ b/tests/test_api/test_methods/test_get_sticker_set.py @@ -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 diff --git a/tests/test_api/test_methods/test_get_updates.py b/tests/test_api/test_methods/test_get_updates.py index 92081e7b..c400b1df 100644 --- a/tests/test_api/test_methods/test_get_updates.py +++ b/tests/test_api/test_methods/test_get_updates.py @@ -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 diff --git a/tests/test_api/test_methods/test_get_user_profile_photos.py b/tests/test_api/test_methods/test_get_user_profile_photos.py index 093dea82..3e24a115 100644 --- a/tests/test_api/test_methods/test_get_user_profile_photos.py +++ b/tests/test_api/test_methods/test_get_user_profile_photos.py @@ -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 diff --git a/tests/test_api/test_methods/test_get_webhook_info.py b/tests/test_api/test_methods/test_get_webhook_info.py index e3259125..6dc28928 100644 --- a/tests/test_api/test_methods/test_get_webhook_info.py +++ b/tests/test_api/test_methods/test_get_webhook_info.py @@ -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 diff --git a/tests/test_api/test_methods/test_kick_chat_member.py b/tests/test_api/test_methods/test_kick_chat_member.py index f142f649..d60133c5 100644 --- a/tests/test_api/test_methods/test_kick_chat_member.py +++ b/tests/test_api/test_methods/test_kick_chat_member.py @@ -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 diff --git a/tests/test_api/test_methods/test_leave_chat.py b/tests/test_api/test_methods/test_leave_chat.py index f9f876e6..d4788002 100644 --- a/tests/test_api/test_methods/test_leave_chat.py +++ b/tests/test_api/test_methods/test_leave_chat.py @@ -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 diff --git a/tests/test_api/test_methods/test_pin_chat_message.py b/tests/test_api/test_methods/test_pin_chat_message.py index fa87d796..190fefcc 100644 --- a/tests/test_api/test_methods/test_pin_chat_message.py +++ b/tests/test_api/test_methods/test_pin_chat_message.py @@ -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 diff --git a/tests/test_api/test_methods/test_promote_chat_member.py b/tests/test_api/test_methods/test_promote_chat_member.py index 3b8a7797..11528160 100644 --- a/tests/test_api/test_methods/test_promote_chat_member.py +++ b/tests/test_api/test_methods/test_promote_chat_member.py @@ -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 diff --git a/tests/test_api/test_methods/test_restrict_chat_member.py b/tests/test_api/test_methods/test_restrict_chat_member.py index a48caeff..fe3ce74d 100644 --- a/tests/test_api/test_methods/test_restrict_chat_member.py +++ b/tests/test_api/test_methods/test_restrict_chat_member.py @@ -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 diff --git a/tests/test_api/test_methods/test_send_animation.py b/tests/test_api/test_methods/test_send_animation.py index b02bad5f..95e85cc1 100644 --- a/tests/test_api/test_methods/test_send_animation.py +++ b/tests/test_api/test_methods/test_send_animation.py @@ -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 diff --git a/tests/test_api/test_methods/test_send_audio.py b/tests/test_api/test_methods/test_send_audio.py index fdc06bdb..4a33bbdc 100644 --- a/tests/test_api/test_methods/test_send_audio.py +++ b/tests/test_api/test_methods/test_send_audio.py @@ -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 diff --git a/tests/test_api/test_methods/test_send_chat_action.py b/tests/test_api/test_methods/test_send_chat_action.py index 1d98b482..1478b160 100644 --- a/tests/test_api/test_methods/test_send_chat_action.py +++ b/tests/test_api/test_methods/test_send_chat_action.py @@ -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 diff --git a/tests/test_api/test_methods/test_send_contact.py b/tests/test_api/test_methods/test_send_contact.py index 44435d2d..801968ed 100644 --- a/tests/test_api/test_methods/test_send_contact.py +++ b/tests/test_api/test_methods/test_send_contact.py @@ -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 diff --git a/tests/test_api/test_methods/test_send_dice.py b/tests/test_api/test_methods/test_send_dice.py index 1594cda4..981c242b 100644 --- a/tests/test_api/test_methods/test_send_dice.py +++ b/tests/test_api/test_methods/test_send_dice.py @@ -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 diff --git a/tests/test_api/test_methods/test_send_document.py b/tests/test_api/test_methods/test_send_document.py index 5ddd2e6a..d7d5b32d 100644 --- a/tests/test_api/test_methods/test_send_document.py +++ b/tests/test_api/test_methods/test_send_document.py @@ -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 diff --git a/tests/test_api/test_methods/test_send_game.py b/tests/test_api/test_methods/test_send_game.py index 7728c079..35373f2e 100644 --- a/tests/test_api/test_methods/test_send_game.py +++ b/tests/test_api/test_methods/test_send_game.py @@ -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 diff --git a/tests/test_api/test_methods/test_send_invoice.py b/tests/test_api/test_methods/test_send_invoice.py index eb6c83b6..d033e621 100644 --- a/tests/test_api/test_methods/test_send_invoice.py +++ b/tests/test_api/test_methods/test_send_invoice.py @@ -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 diff --git a/tests/test_api/test_methods/test_send_location.py b/tests/test_api/test_methods/test_send_location.py index d833733c..cbadceaa 100644 --- a/tests/test_api/test_methods/test_send_location.py +++ b/tests/test_api/test_methods/test_send_location.py @@ -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 diff --git a/tests/test_api/test_methods/test_send_media_group.py b/tests/test_api/test_methods/test_send_media_group.py index 14a30ccb..884d362c 100644 --- a/tests/test_api/test_methods/test_send_media_group.py +++ b/tests/test_api/test_methods/test_send_media_group.py @@ -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, diff --git a/tests/test_api/test_methods/test_send_message.py b/tests/test_api/test_methods/test_send_message.py index 9c09284e..26d85613 100644 --- a/tests/test_api/test_methods/test_send_message.py +++ b/tests/test_api/test_methods/test_send_message.py @@ -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 diff --git a/tests/test_api/test_methods/test_send_photo.py b/tests/test_api/test_methods/test_send_photo.py index 2ff2b7c6..e3c2065e 100644 --- a/tests/test_api/test_methods/test_send_photo.py +++ b/tests/test_api/test_methods/test_send_photo.py @@ -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 diff --git a/tests/test_api/test_methods/test_send_poll.py b/tests/test_api/test_methods/test_send_poll.py index 5e2b6c28..2f963506 100644 --- a/tests/test_api/test_methods/test_send_poll.py +++ b/tests/test_api/test_methods/test_send_poll.py @@ -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 diff --git a/tests/test_api/test_methods/test_send_sticker.py b/tests/test_api/test_methods/test_send_sticker.py index 8475581e..12c3b28e 100644 --- a/tests/test_api/test_methods/test_send_sticker.py +++ b/tests/test_api/test_methods/test_send_sticker.py @@ -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 diff --git a/tests/test_api/test_methods/test_send_venue.py b/tests/test_api/test_methods/test_send_venue.py index bad987af..9246dd90 100644 --- a/tests/test_api/test_methods/test_send_venue.py +++ b/tests/test_api/test_methods/test_send_venue.py @@ -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 diff --git a/tests/test_api/test_methods/test_send_video.py b/tests/test_api/test_methods/test_send_video.py index 6d52f109..0729dda5 100644 --- a/tests/test_api/test_methods/test_send_video.py +++ b/tests/test_api/test_methods/test_send_video.py @@ -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 diff --git a/tests/test_api/test_methods/test_send_video_note.py b/tests/test_api/test_methods/test_send_video_note.py index bb235bed..8a31209e 100644 --- a/tests/test_api/test_methods/test_send_video_note.py +++ b/tests/test_api/test_methods/test_send_video_note.py @@ -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 diff --git a/tests/test_api/test_methods/test_send_voice.py b/tests/test_api/test_methods/test_send_voice.py index 6dcab09d..bd19921a 100644 --- a/tests/test_api/test_methods/test_send_voice.py +++ b/tests/test_api/test_methods/test_send_voice.py @@ -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 diff --git a/tests/test_api/test_methods/test_set_chat_administrator_custom_title.py b/tests/test_api/test_methods/test_set_chat_administrator_custom_title.py index e4372c3d..2f4752c7 100644 --- a/tests/test_api/test_methods/test_set_chat_administrator_custom_title.py +++ b/tests/test_api/test_methods/test_set_chat_administrator_custom_title.py @@ -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 diff --git a/tests/test_api/test_methods/test_set_chat_description.py b/tests/test_api/test_methods/test_set_chat_description.py index 244ec570..3679d1c5 100644 --- a/tests/test_api/test_methods/test_set_chat_description.py +++ b/tests/test_api/test_methods/test_set_chat_description.py @@ -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 diff --git a/tests/test_api/test_methods/test_set_chat_permissions.py b/tests/test_api/test_methods/test_set_chat_permissions.py index 8239cc44..83c90883 100644 --- a/tests/test_api/test_methods/test_set_chat_permissions.py +++ b/tests/test_api/test_methods/test_set_chat_permissions.py @@ -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 diff --git a/tests/test_api/test_methods/test_set_chat_photo.py b/tests/test_api/test_methods/test_set_chat_photo.py index 5517c66b..02e00670 100644 --- a/tests/test_api/test_methods/test_set_chat_photo.py +++ b/tests/test_api/test_methods/test_set_chat_photo.py @@ -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 diff --git a/tests/test_api/test_methods/test_set_chat_sticker_set.py b/tests/test_api/test_methods/test_set_chat_sticker_set.py index 45bb666e..50a87ca7 100644 --- a/tests/test_api/test_methods/test_set_chat_sticker_set.py +++ b/tests/test_api/test_methods/test_set_chat_sticker_set.py @@ -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 diff --git a/tests/test_api/test_methods/test_set_chat_title.py b/tests/test_api/test_methods/test_set_chat_title.py index 88bb1795..40473bc1 100644 --- a/tests/test_api/test_methods/test_set_chat_title.py +++ b/tests/test_api/test_methods/test_set_chat_title.py @@ -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 diff --git a/tests/test_api/test_methods/test_set_game_score.py b/tests/test_api/test_methods/test_set_game_score.py index 8f9eaf6d..5b6cbb84 100644 --- a/tests/test_api/test_methods/test_set_game_score.py +++ b/tests/test_api/test_methods/test_set_game_score.py @@ -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 diff --git a/tests/test_api/test_methods/test_set_my_commands.py b/tests/test_api/test_methods/test_set_my_commands.py index ccf9f36b..e2d339aa 100644 --- a/tests/test_api/test_methods/test_set_my_commands.py +++ b/tests/test_api/test_methods/test_set_my_commands.py @@ -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 diff --git a/tests/test_api/test_methods/test_set_passport_data_errors.py b/tests/test_api/test_methods/test_set_passport_data_errors.py index 5a78577a..e5ad0a8d 100644 --- a/tests/test_api/test_methods/test_set_passport_data_errors.py +++ b/tests/test_api/test_methods/test_set_passport_data_errors.py @@ -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 diff --git a/tests/test_api/test_methods/test_set_sticker_position_in_set.py b/tests/test_api/test_methods/test_set_sticker_position_in_set.py index 9cfb01bc..b1e72507 100644 --- a/tests/test_api/test_methods/test_set_sticker_position_in_set.py +++ b/tests/test_api/test_methods/test_set_sticker_position_in_set.py @@ -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 diff --git a/tests/test_api/test_methods/test_set_sticker_set_thumb.py b/tests/test_api/test_methods/test_set_sticker_set_thumb.py index affb49ee..b31526d5 100644 --- a/tests/test_api/test_methods/test_set_sticker_set_thumb.py +++ b/tests/test_api/test_methods/test_set_sticker_set_thumb.py @@ -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 diff --git a/tests/test_api/test_methods/test_set_webhook.py b/tests/test_api/test_methods/test_set_webhook.py index fc26b54a..08ddae7d 100644 --- a/tests/test_api/test_methods/test_set_webhook.py +++ b/tests/test_api/test_methods/test_set_webhook.py @@ -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 diff --git a/tests/test_api/test_methods/test_stop_message_live_location.py b/tests/test_api/test_methods/test_stop_message_live_location.py index da9c5910..8ea1ed62 100644 --- a/tests/test_api/test_methods/test_stop_message_live_location.py +++ b/tests/test_api/test_methods/test_stop_message_live_location.py @@ -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 diff --git a/tests/test_api/test_methods/test_stop_poll.py b/tests/test_api/test_methods/test_stop_poll.py index b02c8ad3..03ea9b75 100644 --- a/tests/test_api/test_methods/test_stop_poll.py +++ b/tests/test_api/test_methods/test_stop_poll.py @@ -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 diff --git a/tests/test_api/test_methods/test_unban_chat_member.py b/tests/test_api/test_methods/test_unban_chat_member.py index 64abe810..2d0fffbd 100644 --- a/tests/test_api/test_methods/test_unban_chat_member.py +++ b/tests/test_api/test_methods/test_unban_chat_member.py @@ -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 diff --git a/tests/test_api/test_methods/test_unpin_chat_message.py b/tests/test_api/test_methods/test_unpin_chat_message.py index 315b3165..1ebe5ccb 100644 --- a/tests/test_api/test_methods/test_unpin_chat_message.py +++ b/tests/test_api/test_methods/test_unpin_chat_message.py @@ -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 diff --git a/tests/test_api/test_methods/test_upload_sticker_file.py b/tests/test_api/test_methods/test_upload_sticker_file.py index a90b395b..22b85a33 100644 --- a/tests/test_api/test_methods/test_upload_sticker_file.py +++ b/tests/test_api/test_methods/test_upload_sticker_file.py @@ -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 diff --git a/tests/test_api/test_types/test_callback_query.py b/tests/test_api/test_types/test_callback_query.py index 792cca68..3eae5a07 100644 --- a/tests/test_api/test_types/test_callback_query.py +++ b/tests/test_api/test_types/test_callback_query.py @@ -1,5 +1,5 @@ -from aiogram.api.methods import AnswerCallbackQuery -from aiogram.api.types import CallbackQuery, User +from aiogram.methods import AnswerCallbackQuery +from aiogram.types import CallbackQuery, User class TestCallbackQuery: diff --git a/tests/test_api/test_types/test_chat_member.py b/tests/test_api/test_types/test_chat_member.py index bb88e690..e92c7203 100644 --- a/tests/test_api/test_types/test_chat_member.py +++ b/tests/test_api/test_types/test_chat_member.py @@ -1,6 +1,6 @@ import pytest -from aiogram.api.types import ChatMember, User +from aiogram.types import ChatMember, User user = User(id=42, is_bot=False, first_name="User", last_name=None) diff --git a/tests/test_api/test_types/test_inline_query.py b/tests/test_api/test_types/test_inline_query.py index c828c17a..c822649d 100644 --- a/tests/test_api/test_types/test_inline_query.py +++ b/tests/test_api/test_types/test_inline_query.py @@ -1,5 +1,5 @@ -from aiogram.api.methods import AnswerInlineQuery -from aiogram.api.types import InlineQuery, User +from aiogram.methods import AnswerInlineQuery +from aiogram.types import InlineQuery, User class TestInlineQuery: diff --git a/tests/test_api/test_types/test_input_file.py b/tests/test_api/test_types/test_input_file.py index 0b63e64a..e59dc461 100644 --- a/tests/test_api/test_types/test_input_file.py +++ b/tests/test_api/test_types/test_input_file.py @@ -4,7 +4,7 @@ import pytest from aresponses import ResponsesMockServer from aiogram import Bot -from aiogram.api.types import BufferedInputFile, FSInputFile, InputFile, URLInputFile +from aiogram.types import BufferedInputFile, FSInputFile, InputFile, URLInputFile class TestInputFile: diff --git a/tests/test_api/test_types/test_message.py b/tests/test_api/test_types/test_message.py index eec008d0..818dde38 100644 --- a/tests/test_api/test_types/test_message.py +++ b/tests/test_api/test_types/test_message.py @@ -3,7 +3,7 @@ from typing import Any, Dict, Type, Union import pytest -from aiogram.api.methods import ( +from aiogram.methods import ( SendAnimation, SendAudio, SendContact, @@ -22,7 +22,7 @@ from aiogram.api.methods import ( SendVideoNote, SendVoice, ) -from aiogram.api.types import ( +from aiogram.types import ( Animation, Audio, Chat, diff --git a/tests/test_api/test_types/test_pre_checkout_query.py b/tests/test_api/test_types/test_pre_checkout_query.py index 1bef6cff..ef6c9865 100644 --- a/tests/test_api/test_types/test_pre_checkout_query.py +++ b/tests/test_api/test_types/test_pre_checkout_query.py @@ -1,5 +1,5 @@ -from aiogram.api.methods import AnswerPreCheckoutQuery -from aiogram.api.types import PreCheckoutQuery, User +from aiogram.methods import AnswerPreCheckoutQuery +from aiogram.types import PreCheckoutQuery, User class TestPreCheckoutQuery: diff --git a/tests/test_api/test_types/test_reply_keyboard_remove.py b/tests/test_api/test_types/test_reply_keyboard_remove.py index 03eb5e49..e00d36c3 100644 --- a/tests/test_api/test_types/test_reply_keyboard_remove.py +++ b/tests/test_api/test_types/test_reply_keyboard_remove.py @@ -1,6 +1,6 @@ import pytest -from aiogram.api.types import ReplyKeyboardRemove +from aiogram.types import ReplyKeyboardRemove class TestReplyKeyboardRemove: diff --git a/tests/test_api/test_types/test_shipping_query.py b/tests/test_api/test_types/test_shipping_query.py index 939bb6c5..82db8880 100644 --- a/tests/test_api/test_types/test_shipping_query.py +++ b/tests/test_api/test_types/test_shipping_query.py @@ -1,5 +1,5 @@ -from aiogram.api.methods import AnswerShippingQuery -from aiogram.api.types import LabeledPrice, ShippingAddress, ShippingOption, ShippingQuery, User +from aiogram.methods import AnswerShippingQuery +from aiogram.types import LabeledPrice, ShippingAddress, ShippingOption, ShippingQuery, User class TestInlineQuery: diff --git a/tests/test_api/test_types/test_user.py b/tests/test_api/test_types/test_user.py index ed09b97c..bda3f94e 100644 --- a/tests/test_api/test_types/test_user.py +++ b/tests/test_api/test_types/test_user.py @@ -1,6 +1,6 @@ import pytest -from aiogram.api.types import User +from aiogram.types import User class TestUser: diff --git a/tests/test_dispatcher/test_deprecated.py b/tests/test_dispatcher/test_deprecated.py index edea4aac..d2609079 100644 --- a/tests/test_dispatcher/test_deprecated.py +++ b/tests/test_dispatcher/test_deprecated.py @@ -17,7 +17,6 @@ OBSERVERS = { "poll_answer", "pre_checkout_query", "shipping_query", - "update", } DEPRECATED_OBSERVERS = {observer + "_handler" for observer in OBSERVERS} diff --git a/tests/test_dispatcher/test_dispatcher.py b/tests/test_dispatcher/test_dispatcher.py index e5b9b50f..2fbe08a5 100644 --- a/tests/test_dispatcher/test_dispatcher.py +++ b/tests/test_dispatcher/test_dispatcher.py @@ -2,15 +2,31 @@ import asyncio import datetime import time import warnings +from typing import Any import pytest from aiogram import Bot -from aiogram.api.methods import GetMe, GetUpdates, SendMessage -from aiogram.api.types import Chat, Message, Update, User from aiogram.dispatcher.dispatcher import Dispatcher -from aiogram.dispatcher.event.bases import NOT_HANDLED +from aiogram.dispatcher.event.bases import UNHANDLED, SkipHandler +from aiogram.dispatcher.middlewares.user_context import UserContextMiddleware from aiogram.dispatcher.router import Router +from aiogram.methods import GetMe, GetUpdates, SendMessage +from aiogram.types import ( + CallbackQuery, + Chat, + ChosenInlineResult, + InlineQuery, + Message, + Poll, + PollAnswer, + PollOption, + PreCheckoutQuery, + ShippingAddress, + ShippingQuery, + Update, + User, +) from tests.mocked_bot import MockedBot try: @@ -43,6 +59,13 @@ UPDATE = Update(**RAW_UPDATE) class TestDispatcher: + def test_init(self): + dp = Dispatcher() + + assert dp.update.handlers + assert dp.update.handlers[0].callback == dp._listen_update + assert dp.update.outer_middlewares + def test_parent_router(self): dp = Dispatcher() with pytest.raises(RuntimeError): @@ -145,6 +168,290 @@ class TestDispatcher: assert await dispatcher._process_update(bot=bot, update=Update(update_id=42)) + @pytest.mark.asyncio + @pytest.mark.parametrize( + "event_type,update,has_chat,has_user", + [ + pytest.param( + "message", + Update( + update_id=42, + message=Message( + message_id=42, + date=datetime.datetime.now(), + text="test", + chat=Chat(id=42, type="private"), + from_user=User(id=42, is_bot=False, first_name="Test"), + ), + ), + True, + True, + ), + pytest.param( + "edited_message", + Update( + update_id=42, + edited_message=Message( + message_id=42, + date=datetime.datetime.now(), + text="edited test", + chat=Chat(id=42, type="private"), + from_user=User(id=42, is_bot=False, first_name="Test"), + ), + ), + True, + True, + ), + pytest.param( + "channel_post", + Update( + update_id=42, + channel_post=Message( + message_id=42, + date=datetime.datetime.now(), + text="test", + chat=Chat(id=-42, type="private"), + ), + ), + True, + False, + ), + pytest.param( + "edited_channel_post", + Update( + update_id=42, + edited_channel_post=Message( + message_id=42, + date=datetime.datetime.now(), + text="test", + chat=Chat(id=-42, type="private"), + ), + ), + True, + False, + ), + pytest.param( + "inline_query", + Update( + update_id=42, + inline_query=InlineQuery( + id="query id", + from_user=User(id=42, is_bot=False, first_name="Test"), + query="query", + offset="offser", + ), + ), + False, + True, + ), + pytest.param( + "chosen_inline_result", + Update( + update_id=42, + chosen_inline_result=ChosenInlineResult( + result_id="result id", + from_user=User(id=42, is_bot=False, first_name="Test"), + query="query", + ), + ), + False, + True, + ), + pytest.param( + "callback_query", + Update( + update_id=42, + callback_query=CallbackQuery( + id="query id", + from_user=User(id=42, is_bot=False, first_name="Test"), + chat_instance="instance", + data="placeholder", + ), + ), + False, + True, + ), + pytest.param( + "callback_query", + Update( + update_id=42, + callback_query=CallbackQuery( + id="query id", + from_user=User(id=42, is_bot=False, first_name="Test"), + chat_instance="instance", + data="placeholder", + message=Message( + message_id=42, + date=datetime.datetime.now(), + text="test", + chat=Chat(id=42, type="private"), + from_user=User(id=42, is_bot=False, first_name="Test"), + ), + ), + ), + True, + True, + ), + pytest.param( + "shipping_query", + Update( + update_id=42, + shipping_query=ShippingQuery( + id="id", + from_user=User(id=42, is_bot=False, first_name="Test"), + invoice_payload="payload", + shipping_address=ShippingAddress( + country_code="placeholder", + state="placeholder", + city="placeholder", + street_line1="placeholder", + street_line2="placeholder", + post_code="placeholder", + ), + ), + ), + False, + True, + ), + pytest.param( + "pre_checkout_query", + Update( + update_id=42, + pre_checkout_query=PreCheckoutQuery( + id="query id", + from_user=User(id=42, is_bot=False, first_name="Test"), + currency="BTC", + total_amount=1, + invoice_payload="payload", + ), + ), + False, + True, + ), + pytest.param( + "poll", + Update( + update_id=42, + poll=Poll( + id="poll id", + question="Q?", + options=[ + PollOption(text="A1", voter_count=2), + PollOption(text="A2", voter_count=3), + ], + is_closed=False, + is_anonymous=False, + type="quiz", + allows_multiple_answers=False, + total_voter_count=0, + correct_option_id=1, + ), + ), + False, + False, + ), + pytest.param( + "poll_answer", + Update( + update_id=42, + poll_answer=PollAnswer( + poll_id="poll id", + user=User(id=42, is_bot=False, first_name="Test"), + option_ids=[42], + ), + ), + False, + True, + ), + ], + ) + async def test_listen_update( + self, event_type: str, update: Update, has_chat: bool, has_user: bool + ): + router = Dispatcher() + observer = router.observers[event_type] + + @observer() + async def my_handler(event: Any, **kwargs: Any): + assert event == getattr(update, event_type) + if has_chat: + assert Chat.get_current(False) + if has_user: + assert User.get_current(False) + return kwargs + + result = await router.update.trigger(update, test="PASS") + assert isinstance(result, dict) + assert result["event_update"] == update + assert result["event_router"] == router + assert result["test"] == "PASS" + + @pytest.mark.asyncio + async def test_listen_unknown_update(self): + dp = Dispatcher() + + with pytest.raises(SkipHandler): + await dp._listen_update(Update(update_id=42)) + + @pytest.mark.asyncio + async def test_listen_unhandled_update(self): + dp = Dispatcher() + observer = dp.observers["message"] + + @observer(lambda event: False) + async def handler(event: Any): + pass + + response = await dp._listen_update( + Update( + update_id=42, + poll=Poll( + id="poll id", + question="Q?", + options=[ + PollOption(text="A1", voter_count=2), + PollOption(text="A2", voter_count=3), + ], + is_closed=False, + is_anonymous=False, + type="quiz", + allows_multiple_answers=False, + total_voter_count=0, + correct_option_id=0, + ), + ) + ) + assert response is UNHANDLED + + @pytest.mark.asyncio + async def test_nested_router_listen_update(self): + dp = Dispatcher() + router0 = Router() + router1 = Router() + dp.include_router(router0) + router0.include_router(router1) + observer = router1.message + + @observer() + async def my_handler(event: Message, **kwargs: Any): + return kwargs + + update = Update( + update_id=42, + message=Message( + message_id=42, + date=datetime.datetime.now(), + text="test", + chat=Chat(id=42, type="private"), + from_user=User(id=42, is_bot=False, first_name="Test"), + ), + ) + result = await dp._listen_update(update, test="PASS") + assert isinstance(result, dict) + assert result["event_update"] == update + assert result["event_router"] == router1 + assert result["test"] == "PASS" + @pytest.mark.asyncio async def test_process_update_call_request(self, bot: MockedBot): dispatcher = Dispatcher() @@ -192,6 +499,45 @@ class TestDispatcher: await dispatcher._polling(bot=bot) mocked_process_update.assert_awaited() + @pytest.mark.asyncio + async def test_exception_handler_catch_exceptions(self): + dp = Dispatcher() + router = Router() + dp.include_router(router) + + @router.message() + async def message_handler(message: Message): + raise Exception("KABOOM") + + update = Update( + update_id=42, + message=Message( + message_id=42, + date=datetime.datetime.now(), + text="test", + chat=Chat(id=42, type="private"), + from_user=User(id=42, is_bot=False, first_name="Test"), + ), + ) + with pytest.raises(Exception, match="KABOOM"): + await dp.update.trigger(update) + + @router.errors() + async def error_handler(event: Update, exception: Exception): + return "KABOOM" + + response = await dp.update.trigger(update) + assert response == "KABOOM" + + @dp.errors() + async def root_error_handler(event: Update, exception: Exception): + return exception + + response = await dp.update.trigger(update) + + assert isinstance(response, Exception) + assert str(response) == "KABOOM" + @pytest.mark.asyncio async def test_start_polling(self, bot: MockedBot): dispatcher = Dispatcher() diff --git a/tests/test_dispatcher/test_event/test_handler.py b/tests/test_dispatcher/test_event/test_handler.py index 3db676db..0b842ecf 100644 --- a/tests/test_dispatcher/test_event/test_handler.py +++ b/tests/test_dispatcher/test_event/test_handler.py @@ -3,7 +3,7 @@ from typing import Any, Dict, Union import pytest -from aiogram.api.types import Update +from aiogram.types import Update from aiogram.dispatcher.event.handler import CallableMixin, FilterObject, HandlerObject from aiogram.dispatcher.filters import Text from aiogram.dispatcher.filters.base import BaseFilter diff --git a/tests/test_dispatcher/test_event/test_telegram.py b/tests/test_dispatcher/test_event/test_telegram.py index 5d4c6607..a02e2485 100644 --- a/tests/test_dispatcher/test_event/test_telegram.py +++ b/tests/test_dispatcher/test_event/test_telegram.py @@ -4,7 +4,7 @@ from typing import Any, Awaitable, Callable, Dict, NoReturn, Union import pytest -from aiogram.api.types import Chat, Message, User +from aiogram.types import Chat, Message, User from aiogram.dispatcher.event.bases import SkipHandler from aiogram.dispatcher.event.handler import HandlerObject from aiogram.dispatcher.event.telegram import TelegramEventObserver diff --git a/tests/test_dispatcher/test_filters/test_command.py b/tests/test_dispatcher/test_filters/test_command.py index 319ae2fa..b19f0042 100644 --- a/tests/test_dispatcher/test_filters/test_command.py +++ b/tests/test_dispatcher/test_filters/test_command.py @@ -4,8 +4,8 @@ from typing import Match import pytest -from aiogram.api.methods import GetMe -from aiogram.api.types import Chat, Message, User +from aiogram.methods import GetMe +from aiogram.types import Chat, Message, User from aiogram.dispatcher.filters import Command, CommandObject from tests.mocked_bot import MockedBot diff --git a/tests/test_dispatcher/test_filters/test_content_types.py b/tests/test_dispatcher/test_filters/test_content_types.py index f5252323..60dbee08 100644 --- a/tests/test_dispatcher/test_filters/test_content_types.py +++ b/tests/test_dispatcher/test_filters/test_content_types.py @@ -4,7 +4,7 @@ from typing import cast import pytest from pydantic import ValidationError -from aiogram.api.types import ContentType, Message +from aiogram.types import ContentType, Message from aiogram.dispatcher.filters import ContentTypesFilter diff --git a/tests/test_dispatcher/test_filters/test_text.py b/tests/test_dispatcher/test_filters/test_text.py index 3e0bc479..ed91bbb6 100644 --- a/tests/test_dispatcher/test_filters/test_text.py +++ b/tests/test_dispatcher/test_filters/test_text.py @@ -5,7 +5,7 @@ from typing import Sequence, Type import pytest from pydantic import ValidationError -from aiogram.api.types import CallbackQuery, Chat, InlineQuery, Message, Poll, PollOption, User +from aiogram.types import CallbackQuery, Chat, InlineQuery, Message, Poll, PollOption, User from aiogram.dispatcher.filters import BUILTIN_FILTERS from aiogram.dispatcher.filters.text import Text diff --git a/tests/test_dispatcher/test_handler/test_base.py b/tests/test_dispatcher/test_handler/test_base.py index 48550702..bb0bc296 100644 --- a/tests/test_dispatcher/test_handler/test_base.py +++ b/tests/test_dispatcher/test_handler/test_base.py @@ -6,7 +6,7 @@ from typing import Any import pytest from aiogram import Bot -from aiogram.api.types import Chat, Message, Update +from aiogram.types import Chat, Message, Update from aiogram.dispatcher.event.handler import HandlerObject from aiogram.dispatcher.handler.base import BaseHandler diff --git a/tests/test_dispatcher/test_handler/test_callback_query.py b/tests/test_dispatcher/test_handler/test_callback_query.py index c63381de..69c51e71 100644 --- a/tests/test_dispatcher/test_handler/test_callback_query.py +++ b/tests/test_dispatcher/test_handler/test_callback_query.py @@ -2,7 +2,7 @@ from typing import Any import pytest -from aiogram.api.types import CallbackQuery, User +from aiogram.types import CallbackQuery, User from aiogram.dispatcher.handler import CallbackQueryHandler diff --git a/tests/test_dispatcher/test_handler/test_chosen_inline_result.py b/tests/test_dispatcher/test_handler/test_chosen_inline_result.py index 66ccde90..ebf8359a 100644 --- a/tests/test_dispatcher/test_handler/test_chosen_inline_result.py +++ b/tests/test_dispatcher/test_handler/test_chosen_inline_result.py @@ -2,7 +2,7 @@ from typing import Any import pytest -from aiogram.api.types import CallbackQuery, ChosenInlineResult, User +from aiogram.types import CallbackQuery, ChosenInlineResult, User from aiogram.dispatcher.handler import ChosenInlineResultHandler diff --git a/tests/test_dispatcher/test_handler/test_error.py b/tests/test_dispatcher/test_handler/test_error.py index 093d9b0a..d1ba0eb7 100644 --- a/tests/test_dispatcher/test_handler/test_error.py +++ b/tests/test_dispatcher/test_handler/test_error.py @@ -2,7 +2,7 @@ from typing import Any import pytest -from aiogram.api.types import ( +from aiogram.types import ( CallbackQuery, InlineQuery, Poll, diff --git a/tests/test_dispatcher/test_handler/test_inline_query.py b/tests/test_dispatcher/test_handler/test_inline_query.py index 19c454da..fad9a230 100644 --- a/tests/test_dispatcher/test_handler/test_inline_query.py +++ b/tests/test_dispatcher/test_handler/test_inline_query.py @@ -2,7 +2,7 @@ from typing import Any import pytest -from aiogram.api.types import CallbackQuery, InlineQuery, User +from aiogram.types import CallbackQuery, InlineQuery, User from aiogram.dispatcher.handler import InlineQueryHandler diff --git a/tests/test_dispatcher/test_handler/test_message.py b/tests/test_dispatcher/test_handler/test_message.py index d4cc4818..6ce6f5f1 100644 --- a/tests/test_dispatcher/test_handler/test_message.py +++ b/tests/test_dispatcher/test_handler/test_message.py @@ -3,7 +3,7 @@ from typing import Any import pytest -from aiogram.api.types import Chat, Message, User +from aiogram.types import Chat, Message, User from aiogram.dispatcher.filters import CommandObject from aiogram.dispatcher.handler.message import MessageHandler, MessageHandlerCommandMixin diff --git a/tests/test_dispatcher/test_handler/test_poll.py b/tests/test_dispatcher/test_handler/test_poll.py index 5908b2fc..36438332 100644 --- a/tests/test_dispatcher/test_handler/test_poll.py +++ b/tests/test_dispatcher/test_handler/test_poll.py @@ -2,7 +2,7 @@ from typing import Any import pytest -from aiogram.api.types import ( +from aiogram.types import ( CallbackQuery, InlineQuery, Poll, diff --git a/tests/test_dispatcher/test_handler/test_pre_checkout_query.py b/tests/test_dispatcher/test_handler/test_pre_checkout_query.py index 159d541e..89cbb0fa 100644 --- a/tests/test_dispatcher/test_handler/test_pre_checkout_query.py +++ b/tests/test_dispatcher/test_handler/test_pre_checkout_query.py @@ -2,7 +2,7 @@ from typing import Any import pytest -from aiogram.api.types import PreCheckoutQuery, User +from aiogram.types import PreCheckoutQuery, User from aiogram.dispatcher.handler import PreCheckoutQueryHandler diff --git a/tests/test_dispatcher/test_handler/test_shipping_query.py b/tests/test_dispatcher/test_handler/test_shipping_query.py index 0df94218..5643b618 100644 --- a/tests/test_dispatcher/test_handler/test_shipping_query.py +++ b/tests/test_dispatcher/test_handler/test_shipping_query.py @@ -2,7 +2,7 @@ from typing import Any import pytest -from aiogram.api.types import CallbackQuery, InlineQuery, ShippingAddress, ShippingQuery, User +from aiogram.types import CallbackQuery, InlineQuery, ShippingAddress, ShippingQuery, User from aiogram.dispatcher.handler import ShippingQueryHandler diff --git a/tests/test_dispatcher/test_router.py b/tests/test_dispatcher/test_router.py index 9d425388..d3e4d4c3 100644 --- a/tests/test_dispatcher/test_router.py +++ b/tests/test_dispatcher/test_router.py @@ -3,7 +3,7 @@ from typing import Any import pytest -from aiogram.api.types import ( +from aiogram.types import ( CallbackQuery, Chat, ChosenInlineResult, @@ -18,7 +18,7 @@ from aiogram.api.types import ( Update, User, ) -from aiogram.dispatcher.event.bases import NOT_HANDLED, SkipHandler, skip +from aiogram.dispatcher.event.bases import UNHANDLED, SkipHandler, skip from aiogram.dispatcher.middlewares.user_context import UserContextMiddleware from aiogram.dispatcher.router import Router from aiogram.utils.warnings import CodeHasNoEffect @@ -80,8 +80,7 @@ class TestRouter: def test_observers_config(self): router = Router() - assert router.update.handlers - assert router.update.handlers[0].callback == router._listen_update + assert router.observers["message"] == router.message assert router.observers["edited_message"] == router.edited_message assert router.observers["channel_post"] == router.channel_post @@ -93,290 +92,6 @@ class TestRouter: assert router.observers["pre_checkout_query"] == router.pre_checkout_query assert router.observers["poll"] == router.poll - @pytest.mark.asyncio - @pytest.mark.parametrize( - "event_type,update,has_chat,has_user", - [ - pytest.param( - "message", - Update( - update_id=42, - message=Message( - message_id=42, - date=datetime.datetime.now(), - text="test", - chat=Chat(id=42, type="private"), - from_user=User(id=42, is_bot=False, first_name="Test"), - ), - ), - True, - True, - ), - pytest.param( - "edited_message", - Update( - update_id=42, - edited_message=Message( - message_id=42, - date=datetime.datetime.now(), - text="edited test", - chat=Chat(id=42, type="private"), - from_user=User(id=42, is_bot=False, first_name="Test"), - ), - ), - True, - True, - ), - pytest.param( - "channel_post", - Update( - update_id=42, - channel_post=Message( - message_id=42, - date=datetime.datetime.now(), - text="test", - chat=Chat(id=-42, type="private"), - ), - ), - True, - False, - ), - pytest.param( - "edited_channel_post", - Update( - update_id=42, - edited_channel_post=Message( - message_id=42, - date=datetime.datetime.now(), - text="test", - chat=Chat(id=-42, type="private"), - ), - ), - True, - False, - ), - pytest.param( - "inline_query", - Update( - update_id=42, - inline_query=InlineQuery( - id="query id", - from_user=User(id=42, is_bot=False, first_name="Test"), - query="query", - offset="offser", - ), - ), - False, - True, - ), - pytest.param( - "chosen_inline_result", - Update( - update_id=42, - chosen_inline_result=ChosenInlineResult( - result_id="result id", - from_user=User(id=42, is_bot=False, first_name="Test"), - query="query", - ), - ), - False, - True, - ), - pytest.param( - "callback_query", - Update( - update_id=42, - callback_query=CallbackQuery( - id="query id", - from_user=User(id=42, is_bot=False, first_name="Test"), - chat_instance="instance", - data="placeholder", - ), - ), - False, - True, - ), - pytest.param( - "callback_query", - Update( - update_id=42, - callback_query=CallbackQuery( - id="query id", - from_user=User(id=42, is_bot=False, first_name="Test"), - chat_instance="instance", - data="placeholder", - message=Message( - message_id=42, - date=datetime.datetime.now(), - text="test", - chat=Chat(id=42, type="private"), - from_user=User(id=42, is_bot=False, first_name="Test"), - ), - ), - ), - True, - True, - ), - pytest.param( - "shipping_query", - Update( - update_id=42, - shipping_query=ShippingQuery( - id="id", - from_user=User(id=42, is_bot=False, first_name="Test"), - invoice_payload="payload", - shipping_address=ShippingAddress( - country_code="placeholder", - state="placeholder", - city="placeholder", - street_line1="placeholder", - street_line2="placeholder", - post_code="placeholder", - ), - ), - ), - False, - True, - ), - pytest.param( - "pre_checkout_query", - Update( - update_id=42, - pre_checkout_query=PreCheckoutQuery( - id="query id", - from_user=User(id=42, is_bot=False, first_name="Test"), - currency="BTC", - total_amount=1, - invoice_payload="payload", - ), - ), - False, - True, - ), - pytest.param( - "poll", - Update( - update_id=42, - poll=Poll( - id="poll id", - question="Q?", - options=[ - PollOption(text="A1", voter_count=2), - PollOption(text="A2", voter_count=3), - ], - is_closed=False, - is_anonymous=False, - type="quiz", - allows_multiple_answers=False, - total_voter_count=0, - correct_option_id=1, - ), - ), - False, - False, - ), - pytest.param( - "poll_answer", - Update( - update_id=42, - poll_answer=PollAnswer( - poll_id="poll id", - user=User(id=42, is_bot=False, first_name="Test"), - option_ids=[42], - ), - ), - False, - True, - ), - ], - ) - async def test_listen_update( - self, event_type: str, update: Update, has_chat: bool, has_user: bool - ): - router = Router() - router.update.outer_middleware(UserContextMiddleware()) - observer = router.observers[event_type] - - @observer() - async def my_handler(event: Any, **kwargs: Any): - assert event == getattr(update, event_type) - if has_chat: - assert Chat.get_current(False) - if has_user: - assert User.get_current(False) - return kwargs - - result = await router.update.trigger(update, test="PASS") - assert isinstance(result, dict) - assert result["event_update"] == update - assert result["event_router"] == router - assert result["test"] == "PASS" - - @pytest.mark.asyncio - async def test_listen_unknown_update(self): - router = Router() - - with pytest.raises(SkipHandler): - await router._listen_update(Update(update_id=42)) - - @pytest.mark.asyncio - async def test_listen_unhandled_update(self): - router = Router() - observer = router.observers["message"] - - @observer(lambda event: False) - async def handler(event: Any): - pass - - response = await router._listen_update( - Update( - update_id=42, - poll=Poll( - id="poll id", - question="Q?", - options=[ - PollOption(text="A1", voter_count=2), - PollOption(text="A2", voter_count=3), - ], - is_closed=False, - is_anonymous=False, - type="quiz", - allows_multiple_answers=False, - total_voter_count=0, - correct_option_id=0, - ), - ) - ) - assert response is NOT_HANDLED - - @pytest.mark.asyncio - async def test_nested_router_listen_update(self): - router1 = Router() - router2 = Router() - router3 = Router() - router1.include_router(router2) - router1.include_router(router3) - observer = router3.message - - @observer() - async def my_handler(event: Message, **kwargs: Any): - return kwargs - - update = Update( - update_id=42, - message=Message( - message_id=42, - date=datetime.datetime.now(), - text="test", - chat=Chat(id=42, type="private"), - from_user=User(id=42, is_bot=False, first_name="Test"), - ), - ) - result = await router1._listen_update(update, test="PASS") - assert isinstance(result, dict) - assert result["event_update"] == update - assert result["event_router"] == router3 - assert result["test"] == "PASS" @pytest.mark.asyncio async def test_emit_startup(self): @@ -427,42 +142,3 @@ class TestRouter: skip() with pytest.raises(SkipHandler, match="KABOOM"): skip("KABOOM") - - @pytest.mark.asyncio - async def test_exception_handler_catch_exceptions(self): - root_router = Router() - router = Router() - root_router.include_router(router) - - @router.message() - async def message_handler(message: Message): - raise Exception("KABOOM") - - update = Update( - update_id=42, - message=Message( - message_id=42, - date=datetime.datetime.now(), - text="test", - chat=Chat(id=42, type="private"), - from_user=User(id=42, is_bot=False, first_name="Test"), - ), - ) - with pytest.raises(Exception, match="KABOOM"): - await root_router.update.trigger(update) - - @root_router.errors() - async def root_error_handler(event: Update, exception: Exception): - return exception - - response = await root_router.update.trigger(update) - - assert isinstance(response, Exception) - assert str(response) == "KABOOM" - - @router.errors() - async def error_handler(event: Update, exception: Exception): - return "KABOOM" - - response = await root_router.update.trigger(update) - assert response == "KABOOM" diff --git a/tests/test_utils/test_text_decorations.py b/tests/test_utils/test_text_decorations.py index 790d327c..a1a48b87 100644 --- a/tests/test_utils/test_text_decorations.py +++ b/tests/test_utils/test_text_decorations.py @@ -2,7 +2,7 @@ from typing import List, Optional import pytest -from aiogram.api.types import MessageEntity, User +from aiogram.types import MessageEntity, User from aiogram.utils.text_decorations import TextDecoration, html_decoration, markdown_decoration