From 21c45193da2d74140959b69361b31f5969aef734 Mon Sep 17 00:00:00 2001 From: Alex Root Junior Date: Fri, 29 Jun 2018 00:36:59 +0300 Subject: [PATCH] Implement root group getter. --- aiogram/dispatcher/filters/state.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/aiogram/dispatcher/filters/state.py b/aiogram/dispatcher/filters/state.py index 40bb9f94..3f35e300 100644 --- a/aiogram/dispatcher/filters/state.py +++ b/aiogram/dispatcher/filters/state.py @@ -14,6 +14,15 @@ class State: self._group_name = group_name self._group = None + @property + def group(self): + if not self._group: + raise RuntimeError('This state is not in any group.') + return self._group + + def get_root(self): + return self.group.get_root() + @property def state(self): if self._state is None: @@ -113,6 +122,11 @@ class MetaStatesGroup(type): def states_names(cls) -> tuple: return tuple(state.state for state in cls.states) + def get_root(cls): + if cls._parent is None: + return cls + return cls._parent.get_root() + def __contains__(cls, item): if isinstance(item, str): return item in cls.all_states_names