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.0a2.tar.gz (11.7 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.0a2-py3-none-any.whl (10.8 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for dgsettings-1.0.0a2.tar.gz
Algorithm Hash digest
SHA256 763208ffb7a3f4902b51b14f0087e4382ba1141d9e7728ee6b9ca079b05bc277
MD5 f32ce9895bbb2d00aca187746930faa8
BLAKE2b-256 4f9d75305e512cbc7b14669e9e9854af98a3a54df6b71b3bc8b97bd5dab66604

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for dgsettings-1.0.0a2-py3-none-any.whl
Algorithm Hash digest
SHA256 c0fbcaf1a673db90b84da9c46e382ccd972405edf3180a6d72bd25cda565ecac
MD5 84a9a6041513aa2167f21f2180d2c56a
BLAKE2b-256 42e84b0bad28d6905efd1cdce8acfc88fdb6ffc59a190c06124cdcbfe6d890ce

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