Django app which handles ORM objects' versions.
ognajD is Django-compactible application which handles versionning for ORM models. Main feature is for ognjaD to be a "plug-in" Django application, thus capable to work with "little-to-no" configuring and changes to Django project.
ognajd stores objects' versions in own table, relied on contenttypes application.
ognajD @ v0.2.4 can:
- catch object's save / update signals
- store snapshot of object in DB with:
- timestamp
- serialized version
- hash
- object version may be serialized (currently, only JSON) as:
- diff with previous version (by default)
- raw dumps
- inline with versione for admin models
sample-project is a showcase django project, based on famous
polls application.
You can reference to it for usage cases, examples, testing.You must never deploy sample_project in
production due to exposed SECRET_KEY.
django~=3.2.7might work on lesser versions, not testedjsondiff~=1.3.0might work on lesser versions, not tested
contenttypes
-
make sure to use latest
pip:python3 -m pip install --upgrade pip
-
install
django-ognajd:python3 -m pip install django-ognajd
-
download release asset (
.tar.gzor.whl) -
make sure to use latest
pip:python3 -m pip install --upgrade pip
-
install
django-ognajdfrom file:python3 -m pip install /path/to/downloaded/asset.tar.gz # or .whl
-
clone project:
git clone \ --depth=1 \ --branch=master \ git@github.com:omelched/django-ognajd.git \ </path/to/downloads> -
move
/django-ognajd/ognajdsolely to folder containing django appsmv </path/to/downloads>/django-ognajd/ognajd \ </path/to/django/project/apps>
-
remove leftovers
rm -rf </path/to/downloads>/django-ognajd
Add ognajd to INSTALLED_APPS in your Django project settings.py.
Make sure it is installed before django.contrib.admin.
If you installed package the third way, </path/to/django/project/apps>
must be added to PYTHONPATH. If you not sure add code below in your Django project manage.py before calling main():
sys.path.append('</path/to/django/project/apps>')To register your model as eligible for versioning add attribute-class VersioningMeta to model class definition.
For typing, linters, autocompletion tyou can inherit from ognajd.models.VersioningMeta.
Then set preferred options.
e.g:
# .../your_app/models.py
from django.db import models
from ognajd.models import VersioningMeta
class Question(models.Model):
class VersioningMeta(VersioningMeta):
store_diff = False
... # fields' definitions| Name | Description | Type | Default |
|---|---|---|---|
enabled |
True: if model will be versioned False: if will not |
bool |
True |
store_diff |
True: model's history will be stored as diffs False: as dumps |
bool |
True |
save_empty_changes |
True: if empty changes will be registered False: if will not |
bool |
True |
@omelched (Denis Omelchenko)
ognajD version history and changelist available at releases page.
This project is licensed under the GNU APGLv3 License - see the LICENSE file for details.
Inspiration, code snippets, etc.
- polls showcase app code from sample-django
- index incrementer at model save from
tinfoilboy