Skip to content

Добавление поддержки сравнения State со строкой для совместимости с хранилищем Redis#23

Merged
love-apples merged 1 commit intolove-apples:mainfrom
hedgehog319:main
Feb 6, 2026

Conversation

@hedgehog319
Copy link
Copy Markdown
Contributor

С другом пытаемся добавить хранилище контекста в Redis, однако столкнулись с проблемой поиска обработчика, если current_state представлен в виде строки
В текущей реализации логика поиска обработчиков по состоянию некорректно отрабатывает при использовании состояния в виде строки вместо экземпляров класса State. Это происходит из-за того, что сравнение State == str всегда возвращает False, что ломает проверку в методе Dispatcher._check_handler_match:

if handler.states:
    if current_state not in handler.states:
        return False

При реализации хранилища контекста в Redis возникла необходимость использовать строковые ключи. Для решения проблемы перегрузил метод сравнения у класса State:

def __eq__(self, value: object, /) -> bool:
    if isinstance(value, State):
        return self.name == value.name
    if isinstance(value, str):
        return self.name == value
    raise NotImplementedError(
        f"Сравнение `State` с типом {type(value)} невозможно"
    )

@love-apples love-apples merged commit c2e14bd into love-apples:main Feb 6, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants