mirror of
https://github.com/aiogram/aiogram.git
synced 2025-12-12 18:19:34 +00:00
Fix unexpected behavior of sequences in StateFilter (#791)
* Fix sequence check behavior in StateFilter * Add sequence cases to StateFilter tests * Add the changelog
This commit is contained in:
parent
7c14a6b16b
commit
6e39f9fada
3 changed files with 9 additions and 4 deletions
1
CHANGES/791.bugfix
Normal file
1
CHANGES/791.bugfix
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
Fixed unexpected behavior of sequences in the StateFilter.
|
||||||
|
|
@ -37,11 +37,12 @@ class StateFilter(BaseFilter):
|
||||||
allowed_states = cast(Sequence[StateType], self.state)
|
allowed_states = cast(Sequence[StateType], self.state)
|
||||||
for allowed_state in allowed_states:
|
for allowed_state in allowed_states:
|
||||||
if isinstance(allowed_state, str) or allowed_state is None:
|
if isinstance(allowed_state, str) or allowed_state is None:
|
||||||
if allowed_state == "*":
|
if allowed_state == "*" or raw_state == allowed_state:
|
||||||
return True
|
return True
|
||||||
return raw_state == allowed_state
|
|
||||||
elif isinstance(allowed_state, (State, StatesGroup)):
|
elif isinstance(allowed_state, (State, StatesGroup)):
|
||||||
return allowed_state(event=obj, raw_state=raw_state)
|
if allowed_state(event=obj, raw_state=raw_state):
|
||||||
|
return True
|
||||||
elif isclass(allowed_state) and issubclass(allowed_state, StatesGroup):
|
elif isclass(allowed_state) and issubclass(allowed_state, StatesGroup):
|
||||||
return allowed_state()(event=obj, raw_state=raw_state)
|
if allowed_state()(event=obj, raw_state=raw_state):
|
||||||
|
return True
|
||||||
return False
|
return False
|
||||||
|
|
|
||||||
|
|
@ -41,6 +41,9 @@ class TestStateFilter:
|
||||||
[[None], None, True],
|
[[None], None, True],
|
||||||
[None, "state", False],
|
[None, "state", False],
|
||||||
[[], "state", False],
|
[[], "state", False],
|
||||||
|
[[State("state"), "state"], "state", True],
|
||||||
|
[[MyGroup(), State("state")], "@:state", True],
|
||||||
|
[[MyGroup, State("state")], "state", False],
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
@pytestmark
|
@pytestmark
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue