#python #ru_python

сегодня для одного своего проекта сделал енкодер, который позволяет #pydantic BaseSettings сериализовывать в валидный toml.

Что это дает?

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

2. Добавил функцию добавления описания каждого параметра настроек из аттрибутов Field.title и Field.description в виде ведущих комментариев. Теперь не нужно отдельно лезть на сайт, что бы посмотреть описание параметров - они все уже есть в сгенерированном файле настроек!

В качестве примера:

Допустим, у нас есть вот такая структура данных:

```python
class ImportsSettings(BaseSettings):
is_sorted: bool = Field(
default=True,
title='Сортировка импортов',
description=(
'Определяет, будет ли отсортированы строки импорта. Сортирует в пределах каждой области видимости. '
'Т.е. сортировка будет выполнена независимо для модуля, каждой функции и класса с любой степенью вложения. '
'По-умолчанию True.'
),
)

class StyleSettings(BaseSettings):
line_length: int = Field(80, title='Длинна строки', description='Максимальная длинна одной строки кода')
imports: ImportsSettings = Field(default_factory=ImportsSettings, title='Настройки ипортов')
```

после генерации получим вот такой toml-файл

```toml
### Длинна строки
# Максимальная длинна одной строки кода
line_length = 80

[imports]
### Сортировка импортов
# Определяет, будет ли отсортированы строки импорта. Сортирует в пределах
# каждой области видимости. Т.е. сортировка будет выполнена независимо для
# модуля, каждой функции и класса с любой степенью вложения. По-умолчанию
# True.
is_sorted = true
```