ArFiSettings - гибкое управление настройками приложения с валидацией на основе Pydantic
Документация: https://py-art.github.io/arfi-settings
Исходный код: https://github.com/py-art/arfi-settings
Логотип любезно предоставлен: Alex Zalevski
Преимущества¶
- Содержит весь функционал pydantic-settings, но с более точным разрешением имён.
- Используется наследование при чтении из любых источников.
- Указание источников конфигурации индивидуально для каждого класса настроек.
- Возможность переключения всех настроек сменой всего одного параметра MODE.
- Возможность переключения между конкретными настройками с помощью дискриминатора.
- Чтение файлов конфигурации с любым расширением и без расширения.
- Настройка чтения параметров командной строки индивидуально для класса и для всего проекта.
- Гибкая настройка абсолютно всех параметров.
- Чёткая структура файлов конфигурации из коробки без необходимости предварительной настройки.
- Лёгкое создание собственных источников чтения конфигурации.
- Наличие коннекторов к наиболее распространённым базам данных
- Задание собственных настроек библиотеки по умолчанию в файле
pyproject.toml. - Режим отладки.
- И многое другое...
Заметка: arfi-settings ищет только те переменные, которые указаны в классах настроек. Остальные переменные просто игнорируются.
Что реализовано¶
- MODE - Указание режима чтения настроек, например,
dev,prod,test. - Обратное наследование собственной конфигурации.
- BASE_DIR - Автоматическое определение базовой директории проекта с возможностью переопределения вручную.
- Определение основных настроек
arfi_settingsв файле pyproject.toml. Путь до файлаpyproject.tomlопределяется автоматически с возможностью ручной корректировки. - Определение собственного обработчика и собственного читателя не только для каждого класса, но и для каждого инстанса класса.
- Легкая возможность определение порядка источников чтения настроек, удаления и добавления собственного обработчика для каждого инстанса класса. Требуется всего лишь переопределить список обработчиков по умолчанию. Глобально настраивается в файле
pyproject.tomlили в главном классе настроек. Индивидуально настраивается для каждого класса и для каждого инстанса класса. Есть возможность отключения наследования. - Чтение настроек из командной строки. Требуется задать собственный читатель. По умолчанию отключено. Включается для каждого класса индивидуально или сразу для всех классов в файле
pyproject.toml. - Чтение настроек из переменных окружения. По умолчанию включено всегда. Есть возможность отключить в конкретном классе или в инстансе класса. Полностью отключается во всех классах через файл
pyproject.toml. - Чтение настроек из переменных окружения, заданных в одном или нескольких файлах. По умолчанию задано чтение из файла
.env. Если для файла задан относительный путь, то сначала происходит поиск файла в корневой директории проекта (root_dir), там где лежит файлpyproject.toml. Если файл не найден, то происходит поиск в базовой директории проекта (BASE_DIR). - Чтение настроек из секретной директории. Требуется указать секретную директорию. Задаётся глобально в
pyproject.toml, или в главном классе настроек. Можно переопределить для каждого класса и для каждого инстанса класса. - Чтение настроек из файлов. По умолчанию настройки читаются из директории
./config, главный файл настроек -./config/config.toml. Директорию, как и файл можно переопределить или вообще отключить. По умолчанию читаются файлы с расширениемjson,yml,yamlиtoml. Есть возможность чтения файлов без расширения или чтения файлов с любым другим расширением. Для этого нужно указать существующий или создать собственный читатель. Собственные читатели можно определять как для класса, так и для каждого инстанса класса. - Минимальный набор настроек коннекторов для подключения к базам данных
PostgreSQL,MySQLиSQLite. Особенность:DATABASE_URLопределяется автоматически из остальных настроек, но если задатьDATABASE_URLявно, то остальные настройки переопределяться, то естьDATABASE_URLвсегда имеет приоритет над остальными настройками. В дальнейшем набор коннекторов будет расширен. Будут включены самые распространённые коннекторы не только к базам данных, но и такие какRedis,RabbitMQи т.д. - Режим отладки. Включается в файле
pyproject.toml. На данный момент реализованы минимальные возможности. В дальнейшем планируется расширение возможностей вплоть до созданияwebинтерфейса, если это будет востребовано.
Дорожная карта¶
- Создание документации
- Добавить недостающие коннекторы
- Чтение настроек из файлов без создания модели, но с возможностью использовать
MODE, как для основного класса настроек - Чтение настроек по
URL - Чтение зашифрованных настроек с указанием ключа
- Расширение дебаг-режима