Ability to update data dict from middlewares returns

This commit is contained in:
Mykola Solodukha 2020-10-16 20:00:19 +03:00
parent 4e82865f45
commit 433fe19bc6
2 changed files with 15 additions and 5 deletions

View file

@ -98,7 +98,11 @@ class Handler:
if self.middleware_key:
try:
await self.dispatcher.middleware.trigger(f"pre_process_{self.middleware_key}", args + (data,))
data.update(
await self.dispatcher.middleware.trigger(
f"pre_process_{self.middleware_key}", args + (data,)
) or {}
)
except CancelHandler: # Allow to cancel current event
return results
@ -112,7 +116,11 @@ class Handler:
ctx_token = current_handler.set(handler_obj.handler)
try:
if self.middleware_key:
await self.dispatcher.middleware.trigger(f"process_{self.middleware_key}", args + (data,))
data.update(
await self.dispatcher.middleware.trigger(
f"process_{self.middleware_key}", args + (data,)
) or {}
)
partial_data = _check_spec(handler_obj.spec, data)
response = await handler_obj.handler(*args, **partial_data)
if response is not None:

View file

@ -41,7 +41,7 @@ class MiddlewareManager:
log.debug(f"Loaded middleware '{middleware.__class__.__name__}'")
return middleware
async def trigger(self, action: str, args: typing.Iterable):
async def trigger(self, action: str, args: typing.Iterable) -> dict:
"""
Call action to middlewares with args lilt.
@ -49,8 +49,10 @@ class MiddlewareManager:
:param args:
:return:
"""
data = {}
for app in self.applications:
await app.trigger(action, args)
data.update(await app.trigger(action, args) or {})
return data
class BaseMiddleware:
@ -103,7 +105,7 @@ class BaseMiddleware:
handler = getattr(self, handler_name, None)
if not handler:
return None
await handler(*args)
return await handler(*args)
class LifetimeControllerMiddleware(BaseMiddleware):