From ee3248c3a47a1c83af8544d0f2c6ccd25005a1ab Mon Sep 17 00:00:00 2001 From: Jahongir Qurbonov <109198731+Jahongir-Qurbonov@users.noreply.github.com> Date: Mon, 19 Aug 2024 21:24:56 +0500 Subject: [PATCH] Fix async filter call in combinators (#4435) --- .../client/events/filters/combinators.py | 23 +++++++++++++------ 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/client/src/telethon/_impl/client/events/filters/combinators.py b/client/src/telethon/_impl/client/events/filters/combinators.py index 10b59187..7835526d 100644 --- a/client/src/telethon/_impl/client/events/filters/combinators.py +++ b/client/src/telethon/_impl/client/events/filters/combinators.py @@ -1,6 +1,7 @@ import abc import typing from collections.abc import Callable +from inspect import isawaitable from typing import Awaitable, TypeAlias from ..event import Event @@ -41,7 +42,7 @@ class Combinable(abc.ABC): return self.filter if isinstance(self, Not) else Not(self) # type: ignore [return-value] @abc.abstractmethod - def __call__(self, event: Event) -> bool: + async def __call__(self, event: Event) -> bool: pass @@ -81,8 +82,12 @@ class Any(Combinable): """ return self._filters - def __call__(self, event: Event) -> bool: - return any(f(event) for f in self._filters) + async def __call__(self, event: Event) -> bool: + for f in self._filters: + if await r if isawaitable(r := f(event)) else r: + return True + + return False class All(Combinable): @@ -121,8 +126,12 @@ class All(Combinable): """ return self._filters - def __call__(self, event: Event) -> bool: - return all(f(event) for f in self._filters) + async def __call__(self, event: Event) -> bool: + for f in self._filters: + if not (await r if isawaitable(r := f(event)) else r): + return False + + return True class Not(Combinable): @@ -159,5 +168,5 @@ class Not(Combinable): """ return self._filter - def __call__(self, event: Event) -> bool: - return not self._filter(event) + async def __call__(self, event: Event) -> bool: + return not (await r if isawaitable(r := self._filter(event)) else r)