Стабилизационный релиз 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')
...
Я думаю, это окончательно позволит отделить формы и избежать ошибок импорта при перекрёстном использовании в калбэках (более явно это проблемы встречается в меню, но это останется на моей совести до следующего релиза).