Add async_task decorator.

This commit is contained in:
Alex Root Junior 2017-08-22 20:31:41 +03:00
parent f47b3670de
commit 0b21996b87

View file

@ -1,14 +1,15 @@
import asyncio import asyncio
import functools
import logging import logging
import typing import typing
from aiogram.utils.exceptions import TelegramAPIError, NetworkError
from .filters import CommandsFilter, RegexpFilter, ContentTypeFilter, generate_default_filters from .filters import CommandsFilter, RegexpFilter, ContentTypeFilter, generate_default_filters
from .handler import Handler from .handler import Handler
from .storage import DisabledStorage, BaseStorage, FSMContext from .storage import DisabledStorage, BaseStorage, FSMContext
from .webhook import BaseResponse from .webhook import BaseResponse
from ..bot import Bot from ..bot import Bot
from ..types.message import ContentType from ..types.message import ContentType
from ..utils.exceptions import TelegramAPIError, NetworkError
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
@ -712,3 +713,15 @@ class Dispatcher:
chat: typing.Union[str, int, None] = None, chat: typing.Union[str, int, None] = None,
user: typing.Union[str, int, None] = None) -> FSMContext: user: typing.Union[str, int, None] = None) -> FSMContext:
return FSMContext(storage=self.storage, chat=chat, user=user) return FSMContext(storage=self.storage, chat=chat, user=user)
def async_task(self, func):
def process_response(task):
response = task.result()
self.loop.create_task(response.execute_response(self.bot))
@functools.wraps(func)
async def wrapper(*args, **kwargs):
task = self.loop.create_task(func(*args, **kwargs))
task.add_done_callback(process_response)
return wrapper