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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
51908ff84abb3d68c8318394bd8fec9c7de74c4e3f74fbd6e5aef34b145828c4
|
|
| MD5 |
e4dd2a98fcb3fc479406d14445499c0d
|
|
| BLAKE2b-256 |
e1658342e40fe5ba75da05983f159605f1adcafc8637c8f885d1b2228e830670
|
File details
Details for the file django_confetti-0.1.0-py3-none-any.whl.
File metadata
- Download URL: django_confetti-0.1.0-py3-none-any.whl
- Upload date:
- Size: 35.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d631ffd735074d426519b1fb57d35ec2cced58b448a24b2547f5ae31e691ccb6
|
|
| MD5 |
910965b30bb3e948c376c4dc05b98463
|
|
| BLAKE2b-256 |
14a6f48cf744d5a6b145ff1335b4407eeb42d79609ea4e56337df49e9ff87516
|