hotfix(dispatcher): prop DP.loop may be None, executor and webhook view should respect that (#424)

This commit is contained in:
Martin Winks 2020-09-14 15:44:18 +04:00 committed by GitHub
parent 369bff422a
commit 7c65344dcd
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 12 additions and 6 deletions

View file

@ -1,3 +1,5 @@
import asyncio
from aiogram.dispatcher.middlewares import BaseMiddleware
@ -14,7 +16,7 @@ class EnvironmentMiddleware(BaseMiddleware):
data.update(
bot=dp.bot,
dispatcher=dp,
loop=dp.loop
loop=dp.loop or asyncio.get_event_loop()
)
if self.context:
data.update(self.context)

View file

@ -169,7 +169,7 @@ class WebhookRequestHandler(web.View):
:return:
"""
dispatcher = self.get_dispatcher()
loop = dispatcher.loop
loop = dispatcher.loop or asyncio.get_event_loop()
# Analog of `asyncio.wait_for` but without cancelling task
waiter = loop.create_future()
@ -209,7 +209,7 @@ class WebhookRequestHandler(web.View):
TimeoutWarning)
dispatcher = self.get_dispatcher()
loop = dispatcher.loop
loop = dispatcher.loop or asyncio.get_event_loop()
try:
results = task.result()

View file

@ -123,13 +123,13 @@ class Executor:
"""
def __init__(self, dispatcher, skip_updates=None, check_ip=False, retry_after=None, loop=None):
if loop is None:
loop = dispatcher.loop
if loop is not None:
self._loop = loop
self.dispatcher = dispatcher
self.skip_updates = skip_updates
self.check_ip = check_ip
self.retry_after = retry_after
self.loop = loop
self._identity = secrets.token_urlsafe(16)
self._web_app = None
@ -145,6 +145,10 @@ class Executor:
Bot.set_current(dispatcher.bot)
Dispatcher.set_current(dispatcher)
@property
def loop(self) -> asyncio.AbstractEventLoop:
return getattr(self, "_loop", asyncio.get_event_loop())
@property
def frozen(self):
return self._freeze