* Rework middlewares, separate management to `MiddlewareManager` class

* Rework middlewares

* Added changes description for redis

* Added changes description for redis

* Fixed tests with Redis // aioredis replacement

* Changed msg.<html/md>_text attributes behaviour

* Added changelog for spoilers

* Added possibility to get command magic result as handler arguments
This commit is contained in:
Alex Root Junior 2022-04-16 19:07:32 +03:00 committed by GitHub
parent 930bca0876
commit 286cf39c8a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
51 changed files with 1380 additions and 804 deletions

View file

@ -0,0 +1,42 @@
from functools import partial
from aiogram.dispatcher.middlewares.manager import MiddlewareManager
class TestMiddlewareManager:
async def test_register(self):
manager = MiddlewareManager()
@manager
async def middleware(handler, event, data):
await handler(event, data)
assert middleware in manager._middlewares
manager.unregister(middleware)
assert middleware not in manager._middlewares
async def test_wrap_middlewares(self):
manager = MiddlewareManager()
async def target(*args, **kwargs):
kwargs["target"] = True
kwargs["stack"].append(-1)
return kwargs
async def middleware1(handler, event, data):
data["mw1"] = True
data["stack"].append(1)
return await handler(event, data)
async def middleware2(handler, event, data):
data["mw2"] = True
data["stack"].append(2)
return await handler(event, data)
wrapped = manager.wrap_middlewares([middleware1, middleware2], target)
assert isinstance(wrapped, partial)
assert wrapped.func is middleware1
result = await wrapped(None, {"stack": []})
assert result == {"mw1": True, "mw2": True, "target": True, "stack": [1, 2, -1]}

View file

@ -297,10 +297,9 @@ class TestTelegramEventObserver:
def test_register_middleware(self, middleware_type):
event_observer = TelegramEventObserver(Router(), "test")
middlewares = getattr(event_observer, f"{middleware_type}s")
decorator = getattr(event_observer, middleware_type)
middlewares = getattr(event_observer, middleware_type)
@decorator
@middlewares
async def my_middleware1(handler, event, data):
pass
@ -308,7 +307,7 @@ class TestTelegramEventObserver:
assert my_middleware1.__name__ == "my_middleware1"
assert my_middleware1 in middlewares
@decorator()
@middlewares()
async def my_middleware2(handler, event, data):
pass
@ -319,13 +318,13 @@ class TestTelegramEventObserver:
async def my_middleware3(handler, event, data):
pass
decorator(my_middleware3)
middlewares(my_middleware3)
assert my_middleware3 is not None
assert my_middleware3.__name__ == "my_middleware3"
assert my_middleware3 in middlewares
assert middlewares == [my_middleware1, my_middleware2, my_middleware3]
assert list(middlewares) == [my_middleware1, my_middleware2, my_middleware3]
def test_register_global_filters(self):
router = Router(use_builtin_filters=False)