From 2c9e0fde56c6950dc1f3cc4e18b2b333fcf40a79 Mon Sep 17 00:00:00 2001 From: Andrey Tikhonov <17@itishka.org> Date: Wed, 23 Mar 2022 19:35:30 +0300 Subject: [PATCH 1/2] Fix filtering skip_patterns --- aiogram/dispatcher/middlewares.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/aiogram/dispatcher/middlewares.py b/aiogram/dispatcher/middlewares.py index 5fa09830fa..f567756c5a 100644 --- a/aiogram/dispatcher/middlewares.py +++ b/aiogram/dispatcher/middlewares.py @@ -118,8 +118,13 @@ async def post_process(self, obj, data, *args): pass async def trigger(self, action, args): - if self.skip_patterns is not None and any(item in action for item in self.skip_patterns): - return False + if self.skip_patterns: + skip_actions = ( + (f"pre_process_{item}", f"process_{item}", f"post_process_{item}") + for item in self.skip_patterns + ) + if any(action in item_actions for item_actions in skip_actions): + return False obj, *args, data = args if action.startswith('pre_process_'): From 69eeaf25120337e659efb2b1688f406426726e72 Mon Sep 17 00:00:00 2001 From: Andrey Tikhonov Date: Sat, 30 Jul 2022 14:48:17 +0400 Subject: [PATCH 2/2] cache skip actions --- aiogram/dispatcher/middlewares.py | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/aiogram/dispatcher/middlewares.py b/aiogram/dispatcher/middlewares.py index f567756c5a..cbe552208e 100644 --- a/aiogram/dispatcher/middlewares.py +++ b/aiogram/dispatcher/middlewares.py @@ -110,6 +110,19 @@ class LifetimeControllerMiddleware(BaseMiddleware): # TODO: Rename class skip_patterns = None + _skip_actions = None + + @property + def skip_actions(self): + if self._skip_actions is None: + self._skip_actions = [] + if self.skip_patterns: + self._skip_actions.extend([ + f"pre_process_{item}", + f"process_{item}", + f"post_process_{item}", + ]) + return self._skip_actions async def pre_process(self, obj, data, *args): pass @@ -118,13 +131,8 @@ async def post_process(self, obj, data, *args): pass async def trigger(self, action, args): - if self.skip_patterns: - skip_actions = ( - (f"pre_process_{item}", f"process_{item}", f"post_process_{item}") - for item in self.skip_patterns - ) - if any(action in item_actions for item_actions in skip_actions): - return False + if action in self.skip_actions: + return False obj, *args, data = args if action.startswith('pre_process_'):