From d466da35428d297eb86d95694ff3c7a671482493 Mon Sep 17 00:00:00 2001 From: Cub11k Date: Fri, 14 Apr 2023 22:00:42 +0300 Subject: [PATCH 1/2] Add state_list to StatesGroup --- telebot/asyncio_handler_backends.py | 5 +++++ telebot/handler_backends.py | 7 ++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/telebot/asyncio_handler_backends.py b/telebot/asyncio_handler_backends.py index 96e13ee..99a7b17 100644 --- a/telebot/asyncio_handler_backends.py +++ b/telebot/asyncio_handler_backends.py @@ -81,6 +81,11 @@ class StatesGroup: value.name = ':'.join((cls.__name__, name)) value.group = cls + @property + def state_list(self): + return [value for name, value in self.__dict__.items() + if not name.startswith('__') and not callable(value) and isinstance(value, State)] + class SkipHandler: """ diff --git a/telebot/handler_backends.py b/telebot/handler_backends.py index be2714c..fda6997 100644 --- a/telebot/handler_backends.py +++ b/telebot/handler_backends.py @@ -191,7 +191,12 @@ class StatesGroup: value.name = ':'.join((cls.__name__, name)) value.group = cls - + @property + def state_list(self): + return [value for name, value in self.__dict__.items() + if not name.startswith('__') and not callable(value) and isinstance(value, State)] + + class BaseMiddleware: """ Base class for middleware. From e4bddd91cb3a3ef849960977e63c0da33ab8539c Mon Sep 17 00:00:00 2001 From: Cub11k Date: Fri, 14 Apr 2023 22:11:08 +0300 Subject: [PATCH 2/2] Define state_list in __init_subclass__ --- telebot/asyncio_handler_backends.py | 7 ++++--- telebot/handler_backends.py | 6 ++++-- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/telebot/asyncio_handler_backends.py b/telebot/asyncio_handler_backends.py index 99a7b17..a565023 100644 --- a/telebot/asyncio_handler_backends.py +++ b/telebot/asyncio_handler_backends.py @@ -74,17 +74,18 @@ class StatesGroup: my_state = State() # returns my_state:State string. """ def __init_subclass__(cls) -> None: - + state_list = [] for name, value in cls.__dict__.items(): if not name.startswith('__') and not callable(value) and isinstance(value, State): # change value of that variable value.name = ':'.join((cls.__name__, name)) value.group = cls + state_list.append(value) + cls._state_list = state_list @property def state_list(self): - return [value for name, value in self.__dict__.items() - if not name.startswith('__') and not callable(value) and isinstance(value, State)] + return self._state_list class SkipHandler: diff --git a/telebot/handler_backends.py b/telebot/handler_backends.py index fda6997..2e4f86e 100644 --- a/telebot/handler_backends.py +++ b/telebot/handler_backends.py @@ -185,16 +185,18 @@ class StatesGroup: my_state = State() # returns my_state:State string. """ def __init_subclass__(cls) -> None: + state_list = [] for name, value in cls.__dict__.items(): if not name.startswith('__') and not callable(value) and isinstance(value, State): # change value of that variable value.name = ':'.join((cls.__name__, name)) value.group = cls + state_list.append(value) + cls._state_list = state_list @property def state_list(self): - return [value for name, value in self.__dict__.items() - if not name.startswith('__') and not callable(value) and isinstance(value, State)] + return self._state_list class BaseMiddleware: