Skip to main content

Config & feature settings for Django: global/user overrides, cache, API, seeding.

Project description

Django Confetti 🎉

Django Confetti — это модуль управления настройками для Django, вдохновлённый архитектурой REST_FRAMEWORK и подходами feature-flag систем.
Он позволяет централизованно описывать и хранить глобальные и пользовательские настройки приложения, группировать их по категориям, автоматически сидировать дефолты и использовать через удобный API.


Возможности

  • 🔑 Централизованные определения настроек (SettingDefinition) с категориями, типами и значениями по умолчанию.
  • 👤 Поддержка пользовательских override (SettingValue): значение можно задать глобально или для конкретного пользователя.
  • Кэширование и автоматическая инвалидация через Django signals.
  • 🛠 Автосидирование: дефолтные категории/настройки создаются при migrate (без перезаписи существующих).
  • 🔄 Команды управления:
    • confetti_seed — создать недостающие настройки из settings.CONFETTI.
    • confetti_sync — синхронизировать с флагами обновления полей.
  • 📦 API & Views: готовые эндпоинты для получения/обновления настроек (DRF).
  • 📜 Swagger (опционально, через drf-yasg): документация к API включается автоматически.
  • 🧩 Конфиг через Django settings: как в DRF (CONFETTI = {...}), с поддержкой dotted path для функций.
  • 🚀 Fallback без DRF: работает даже если в проекте нет DRF или drf-yasg.

Установка

pip install django_confetti

Добавьте в INSTALLED_APPS:

INSTALLED_APPS = [
    # ...
    "confetti",
]

Быстрый старт

Настройка в settings.py

CONFETTI = {
    # Кастомный метод ответа (callable или "pkg.mod:func")
    "RESPONSE_METHOD": "myproject.api.responses:api_response", # default rest_framework.response.Response or django.http.JsonResponse

    # Автосидирование дефолтных настроек
    "AUTO_SEED": True,

    "SEED_CATEGORIES": [
        {"code": "scheduler", "title": "Планировщик"},
        {"code": "notifications", "title": "Уведомления"},
    ],

    "SEED_DEFINITIONS": [
        {
            "key": "feature.scheduler.enable_jobs",
            "type": "bool",
            "category": "scheduler",
            "title": "Включить планировщик",
            "default": True,
        },
        {
            "key": "job.cleanup.schedule",
            "type": "cron",
            "category": "scheduler",
            "title": "Cron очистки",
            "default": "0 3 * * *",
        },
        {
            "key": "notifications.email.enabled",
            "type": "bool",
            "category": "notifications",
            "title": "Почтовые уведомления",
            "default": True,
        },
    ],
}

Исользование API

from confetti.api import get, is_enabled, set_value
from confetti.conf import confetti_settings

# Получение значения
jobs_enabled = is_enabled("feature.scheduler.enable_jobs")  # True / False

# Учитывает пользовательские override
theme = get("ui.theme", user=request.user, default="light")

# Установка значения
set_value("ui.theme", "dark", user=request.user)

# Универсальный ответ (DRF Response или JsonResponse)
return confetti_settings.RESPONSE_METHOD(data={"status": "ok"}, status=200)

REST API

# project/urls.py
urlpatterns = [
    # ...
    path("api/confetti/", include("confetti.urls", namespace="confetti")),
]

Доступные эндпоинты

Доступные эндпоинты

  • GET /api/confetti/settings/ Список всех настроек.

    • Аноним: только глобальные и default.
    • Авторизованный: добавляется user_value и effective учитывает override.
  • GET /api/confetti/settings/<key>/ Получить одну настройку.

    • PATCH /api/confetti/settings/<key>/ Обновить настройку.

scope="user" или без scope: создаёт/обновляет пользовательское значение (требует авторизацию).

scope="global": меняет глобальное значение (требует is_staff/is_superuser).

Удалять нельзя. Чтобы вернуть default, можно передать {"value": null}.

Управление через команды

# Создать недостающие (не трогает существующие)
python manage.py confetti_seed

# Синхронизировать (обновляет безопасные поля)
python manage.py confetti_sync --update

# Синхронизировать + обновить default/choices/type
python manage.py confetti_sync --update --update-defaults

# Только посмотреть, что изменится
python manage.py confetti_sync --dry-run

Swagger (Опционально)

Если в проекте есть drf-yasg, Confetti автоматически добавляет аннотации. Если нет — проект работает без него (декораторы превращаются в no-op).

Для установки с поддержкой документации:

pip install django_confetti[docs]

Архитектура

  • SettingCategory — категории для группировки.

  • SettingDefinition — описание настройки: ключ, тип (bool, int, str, json, choice, cron, rrule, …), дефолт.

  • SettingValue — конкретное значение: глобальное или для пользователя.

  • Кэширование: значения хранятся в Django cache (confetti:v1:{key}:{user_id|global}), инвалидируются сигналами.

  • Seed/sync: автоматическое создание из settings.CONFETTI.

Требования

  • Python 3.10+
  • Django 3.2+
  • (опционально) Django REST Framework
  • (опционально) drf-yasg

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

django_confetti-0.1.0.tar.gz (31.8 kB view details)

Uploaded Source

Built Distribution

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

django_confetti-0.1.0-py3-none-any.whl (35.2 kB view details)

Uploaded Python 3

File details

Details for the file django_confetti-0.1.0.tar.gz.

File metadata

  • Download URL: django_confetti-0.1.0.tar.gz
  • Upload date:
  • Size: 31.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.8

File hashes

Hashes for django_confetti-0.1.0.tar.gz
Algorithm Hash digest
SHA256 51908ff84abb3d68c8318394bd8fec9c7de74c4e3f74fbd6e5aef34b145828c4
MD5 e4dd2a98fcb3fc479406d14445499c0d
BLAKE2b-256 e1658342e40fe5ba75da05983f159605f1adcafc8637c8f885d1b2228e830670

See more details on using hashes here.

File details

Details for the file django_confetti-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for django_confetti-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d631ffd735074d426519b1fb57d35ec2cced58b448a24b2547f5ae31e691ccb6
MD5 910965b30bb3e948c376c4dc05b98463
BLAKE2b-256 14a6f48cf744d5a6b145ff1335b4407eeb42d79609ea4e56337df49e9ff87516

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