Базовая Django-модель с поддержкой полиморфизма и soft-delete (django-polymorphic, django-safedelete), автоматическим управлением активности и интеграцией с Celery.
Project description
django-basemodels
django-basemodels — небольшой, но гибкий пакет для Django, который предоставляет абстрактную базовую модель с:
- поддержкой полиморфизма (через
django-polymorphic); - безопасного удаления (soft-delete) через
django-safedelete; - полями и утилитами для управления активности записей (
is_active,active_start,active_end); - массовыми операциями и менеджером/QuerySet с полезными методами (
active(),inactive(),activate(),deactivate(),update_activity_status()); - интеграцией с Celery для периодического обновления статуса активности.
Проект спроектирован как drop-in база для ваших моделей: вы наследуете BaseModel, и получаете все возможности готовой логики управления состоянием и удаления.
Особенности
- Абстрактная
BaseModel— готовые поля:created_at,updated_at,is_active,active_start,active_end. - Менеджер
objectsподдерживает soft-delete черезdjango-safedelete. - Полиморфизм через
django-polymorphic. - Удобные массовые методы:
activate(),deactivate(),active(),inactive(). - Задача celery для периодического обновления is_active у моделей:
django_basemodels.update_activity_status - Поддержка конфигурации
django_celery_beat— при наличии создаётся периодическая задача.
Требования
- Python >=3.12
- Django >=5.0
django-polymorphicdjango-safedelete- (опционально)
celeryиdjango_celery_beatдля автоматического обновления активности - (опционально)
celery_hchecker— для проверки состояния Celery в рантайме (если используется)
Установка
Базовая установка (без Celery)
pip install django-basemodels
С поддержкой Celery
pip install django-basemodels[celery]
Функции, доступные только в Celery:
- Автоматическое обновление статуса активности
- Периодические задачи через django-celery-beat
- Проверка здоровья celery
Добавьте в INSTALLED_APPS в settings.py:
INSTALLED_APPS = [
# ...
"polymorphic",
"safedelete",
"django_basemodels",
# ...
]
Быстрый старт
Определение модели:
from django.db import models
from django_basemodels.models import BaseModel
class Article(BaseModel):
title = models.CharField(max_length=255)
body = models.TextField()
Использование менеджера и методов:
# получение активных записей (в зависимости от состояния Celery — по флагу is_active или по временным полям)
Article.objects.active()
# массовая деактивация
Article.objects.deactivate()
# массовая активация
Article.objects.activate()
# вручную обновить is_active для всех записей по правилам active_start/active_end
Article.objects.update_activity_status(batch_size=500)
Доступ ко всем (включая удаленные) объектам:
Article.all_objects.all() # видимы даже soft-deleted при DELETED_VISIBLE
Article.deleted_objects.all()
Краткое API
BaseModel (абстрактный)
created_at,updated_at— авто-поля времени.is_active,active_start,active_end— управление активности.activate()/deactivate()— изменения с сохранениемupdated_at.is_active_real— вычисление активности (учитывает состояние Celery).
BaseModelQuerySet / BaseModelManager
update(**kwargs)— при массовом обновлении ставитupdated_at = now().active()/inactive()— возвращает элементы в зависимости от доступности Celery (по флагу или по временным полям).update_activity_status(batch_size=1000)— пересчитываетis_activeбатчами, используетbulk_update.
Celery и django_celery_beat
- Задачи:
django_basemodels.update_model_activity(model_label)иdjango_basemodels.update_activity_status(). - При наличии
django_celery_beatпакет попытается создать периодическую задачу после миграций. - Для проверки состояния Celery используется
celery_hchecker. Если он не инициализирован,active()будет полагаться на временные поля.
Тестирование (pytest)
Рекомендуемая структура проекта: src/ + tests/ (poetry default). Установите pytest и pytest-django и запустите:
poetry add --dev pytest pytest-django
poetry run pytest -q
Примеры важных замечаний при тестировании:
- Если
query.pyиспользуетfrom .utils import celery_is_healthy, то в тестах патчить нужноdjango_basemodels.query.celery_is_healthy. - Альтернативно, поменяйте импорт в
query.pyнаfrom . import utilsи патчьтеdjango_basemodels.utils.celery_is_healthy.
Практические советы
update_activity_statusрассчитан на большую нагрузку (батчи +bulk_update). Настройтеbatch_sizeпод вашу БД.- Добавьте логирование в задачи Celery в продакшене для мониторинга числа обновлённых записей.
- Для крупных таблиц рассмотрите частичные индексы (Postgres) по условию активности.
Лицензия
MIT
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_basemodels-0.0.6.tar.gz.
File metadata
- Download URL: django_basemodels-0.0.6.tar.gz
- Upload date:
- Size: 10.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.2.0 CPython/3.13.0 Windows/11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
154979dd58b8010e5ac3ad454c7f4101e50685e0b1d81d23b5b8cc4b03d152f0
|
|
| MD5 |
f13327c5fb3d54cab3fcc32645e7560f
|
|
| BLAKE2b-256 |
5bbfe9112c6fb8093128d969d1149fbda0e3b596b8c28d528fb1799b4141e543
|
File details
Details for the file django_basemodels-0.0.6-py3-none-any.whl.
File metadata
- Download URL: django_basemodels-0.0.6-py3-none-any.whl
- Upload date:
- Size: 12.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.2.0 CPython/3.13.0 Windows/11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
afd180bd52ee28be37e1ef878b6495a530bb6865fcd7b863dd8d5352751d00bc
|
|
| MD5 |
88d13e65de350a69b717d2eb18484920
|
|
| BLAKE2b-256 |
34179a414a02725991e8e8095483aa7665014c61a3f9395e37bb37bff07d1c22
|