Skip to main content

Simple settings manager

Project description

dgsettings

Универсальный менеджер конфигураций Python-приложений

  • ✔️ Чтение и авто-перезагрузка YAML/JSON-файлов с поддержкой переменных среды и .env
  • ✔️ Хранение и обновление конфигов из различных источников: файлов, PostgreSQL, Redis
  • ✔️ Плагинная архитектура — легко расширяется под ваши нужды
  • ✔️ Работа с несколькими сервисами (service_name)
  • ✔️ Легкая интеграция c любой средой (FastAPI, Celery, классические сервисы, микросервисы)

Возможности

  • Settings: Основной класс для работы с деревом конфигурации.
  • FileConfigStorage: Файловое хранение с автоматическим обновлением при изменении.
  • DBConfigStorage: Встроенная поддержка PostgreSQL и других СУБД через SQLAlchemy, автоматическое создание таблицы.
  • RedisConfigStorage: Быстрый конфиг через Redis (опционально).
  • check_reload(): Позволяет легко реализовать "hot reload" настроек сервиса, если источник изменился.

Установка

pip install dgsettings  # если в PyPI (или копируйте repo)
pip install dgsettings[redis] # для Redis-хранилища
pip install dgsettings[db]  # для работы с БД (Postgres)

Пример использования

Самый простой вариант: использование файлового слоя

from dgsettings import Settings

settings = Settings(file_="config.yaml", env_file=".env")

db = settings.get("db")
print(db["user"])   # поддерживаются переменные окружения и .env-файлов: db_user: "%PGUSER%"

# Авто-перезагрузка (например, в цикле сервиса)
if settings.check_reload():
    print("Конфиг-файл изменился! Нужно обновить состояние приложения")

Использование с PostgreSQL (DBConfigStorage)

from dgsettings import Settings, DBConfigStorage
from sqlalchemy import create_engine, Table, MetaData

engine = create_engine("postgresql://user:pass@localhost:5432/mydb")

# Автоматически создаём таблицу для хранения конфигов (разделение по service_name)
DBConfigStorage.create_table_if_needed(engine)

metadata = MetaData(bind=engine)
table = Table("app_configs", metadata, autoload_with=engine)

storage = DBConfigStorage(
    session_factory=lambda: engine.connect(),  # или sessionmaker()
    table=table,
    key_column='service_name',
    value_column='config_data',
    service_name='my_service',
    auto_reload=True,     # авто-перезагрузка при обновлении, если есть поле updated_at
    engine=engine
)

settings = Settings(storage=storage)

Использование с Redis (RedisConfigStorage)

from dgsettings import Settings, RedisConfigStorage
import redis

client = redis.Redis(host="localhost")
# Для hot reload желательно указать ts_key
storage = RedisConfigStorage(client, "config:myservice", auto_reload=True, ts_key="config:myservice:ts")
settings = Settings(storage=storage)

API кратко

  • Settings(file_="...", env_file="...") — создание и авто-парсинг конфига.
  • parse(file_) — парсинг файла (JSON/YAML).
  • save(file_) — сохранить текущий конфиг в файл.
  • get(key, default=None) — получить значение по ключу.
  • set(obj) — установить словарь настроек.
  • check_reload() — если источник изменился, перезагружает, возвращает True.
  • convert("config.yaml", "config.json", use_yaml=False) — переводит между форматами JSON/YAML.

Переменные среды и .env

Любая строка вида $VARNAME$ или ${VARNAME} в конфиге подменяется на значение переменной среды или из файла .env

.env:

PGUSER=postgres
PGPASSWORD=secret

config.yaml:

db_user: "$PGUSER$"
db_pass: "${PGPASSWORD}"

Автосоздание таблицы PostgreSQL

  • Таблица создаётся автоматически при первом запуске через DBConfigStorage.create_table_if_needed(engine).
  • В таблице выделяются поля service_name (имя сервиса), config_data (JSON), updated_at (авто-метка времени).

Необязательные зависимости

  • Для работы с файлами (FileConfigStorage) — только PyYAML/JSON.
  • Для работы с БД — SQLAlchemy и psycopg2/asyncpg и т.п.
  • Для работы с Redis — пакет redis.

Если зависимости не установлены, соответствующий storage будет недоступен, но Settings и файловая работа будут работать всегда.


Пример сервисной интеграции

# В потоке/таймере/worker-e проверяем:
if settings.check_reload():
    my_service.reload_settings()

Расширяемость

Вы можете реализовать свой storage (например, через S3, Consul, etcd). Просто реализуйте абстрактный класс ConfigStorageBase (load, save, has_changed, supports_auto_reload).


Contributing

Пулреквесты, багрепорты и обсуждения приветствуются!


Лицензия

MIT


Авторы:
["Roman Rasputin"]


Пример быстрого старта, документация по методам и архитектуре — см. исходный код либо открывайте issues!

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

dgsettings-1.0.0a8.tar.gz (12.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

dgsettings-1.0.0a8-py3-none-any.whl (11.6 kB view details)

Uploaded Python 3

File details

Details for the file dgsettings-1.0.0a8.tar.gz.

File metadata

  • Download URL: dgsettings-1.0.0a8.tar.gz
  • Upload date:
  • Size: 12.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.12

File hashes

Hashes for dgsettings-1.0.0a8.tar.gz
Algorithm Hash digest
SHA256 c1ae2e32fb8266ac4ae30eb46d68c788bd47f4437522c0c270034693ac0ff4d7
MD5 60744d434edc16f15e69f88058bfad20
BLAKE2b-256 2279f1fb697805e914436407ea8d2f4d61b6eb7ebe27fa16b97682bc17f46aab

See more details on using hashes here.

File details

Details for the file dgsettings-1.0.0a8-py3-none-any.whl.

File metadata

  • Download URL: dgsettings-1.0.0a8-py3-none-any.whl
  • Upload date:
  • Size: 11.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.12

File hashes

Hashes for dgsettings-1.0.0a8-py3-none-any.whl
Algorithm Hash digest
SHA256 e28af0b19f8edd7e2b4a309634e04ed284471a3a619bbae5dbcaccec1c8367b9
MD5 dd79385411c3147a677349ad38157048
BLAKE2b-256 bbd098d7eb4acd20c723126a18d6999342ebc7269b6f1d06a8f4a96c80e5c5ed

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page