13g10n
Напишите мне
На главную

Стабилизационный релиз aiogram-forms

Сегодня вышел релиз 1.1.0 для aiogram-forms, который можно смело называть стабилизационным, т.к. нового там совсем мало и по большей части я целился в тесты, покрытие и типы.

Первые изменения висели в гите аж в начале февраля, но — как и полагается — нужен был небольшой пинок, чтобы найти время и мотивацию закончить версию. В этот раз таким пинком стало несколько упоминаний библиотеки в письмах и даже вопросы.

Пользуясь случаем, хочу напомнить, что есть документация, которая, конечно, немного отстаёт от разработки, но в целом даёт представление о том, как работать с формами.

Если опустить стабилизационные моменты и изменения, то в новой версии я могу отметить появившиеся ChoiceField и ChoiceValidator. Они позволяют проще добавлять в форму поля, которые имеют ограниченный список для выбора, и завершают перенос функционала из 0.3.0 версии.

Хорошим примером служит выбор языка взаимодействия с пользователем. Передаём в choices конструкцию, содержащую в себе лейбл и значение для каждого элемента:

@dispatcher.register('settings')
class SettingsForm(Form):
    ...
    language = fields.ChoiceField('Language', choices=(
        ('English', 'en'),
        ('Russian', 'ru')
    ))

В этом виде, пользователь увидит клавиатуру для ответа с кнопками English и Russian, но в данные формы будет записано en или ru соответственно.

Ну и не менее важным для меня изменением стала возможность использовать get_data метод менеджера с параметром в виде идентификатора формы.

@router.message(Command(commands=['settings']))
async def show_settings(message: types.Message, forms: FormsManager):
    settings: dict = await forms.get_data('settings')
    ...

Я думаю, это окончательно позволит отделить формы и избежать ошибок импорта при перекрёстном использовании в калбэках (более явно это проблемы встречается в меню, но это останется на моей совести до следующего релиза).

Python
Telegram
aiogram
aiogram-forms