mirror of
https://github.com/aiogram/aiogram.git
synced 2026-04-08 16:37:47 +00:00
Improved Scene handler and action inheritance mechanism (#1585)
* #1583 Improved Scene handler and action inheritance mechanism Enhanced the inheritance of handlers and actions in scenes. Refactored to eliminate the copying of previously connected handlers and actions from parent scenes. Now, handlers are dynamically rebuilt based on the current class, properly utilizing class inheritance and enabling handler overrides. * Added more tests * Added more tests for non-function handlers
This commit is contained in:
parent
080878be86
commit
1dbdcf0516
3 changed files with 125 additions and 9 deletions
|
|
@ -316,10 +316,6 @@ class Scene:
|
|||
if not parent_scene_config:
|
||||
continue
|
||||
|
||||
handlers.extend(parent_scene_config.handlers)
|
||||
for action, action_handlers in parent_scene_config.actions.items():
|
||||
actions[action].update(action_handlers)
|
||||
|
||||
if reset_data_on_enter is None:
|
||||
reset_data_on_enter = parent_scene_config.reset_data_on_enter
|
||||
if reset_history_on_enter is None:
|
||||
|
|
@ -327,9 +323,7 @@ class Scene:
|
|||
if callback_query_without_state is None:
|
||||
callback_query_without_state = parent_scene_config.callback_query_without_state
|
||||
|
||||
for name in vars(cls):
|
||||
value = getattr(cls, name)
|
||||
|
||||
for name, value in inspect.getmembers(cls):
|
||||
if scene_handlers := getattr(value, "__aiogram_handler__", None):
|
||||
handlers.extend(scene_handlers)
|
||||
if isinstance(value, ObserverDecorator):
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue