Перейти к содержанию

ArFiSettings

ArFiSettings - гибкое управление настройками приложения с валидацией на основе Pydantic

Codecov PyPI - Python Version Supported Python versions


Документация: 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
  • Чтение зашифрованных настроек с указанием ключа
  • Расширение дебаг-режима