Model Observer is a Django package that provides functionality to track events of the model. Based on django signals.
Project description
Model Observer
Model Observer is a Django package that provides functionality to track events of the model. Based on django signals.
ModelObserver class will observe model behavior and triggers different signals.
Installation
Use the package manager pip to install model_observer.
pip install model_observer
Available signals
class ModelObserver:
_available_signal_types = ('pre_init', 'post_init', 'pre_save', 'post_save',
'pre_delete', 'post_delete', 'm2m_changed',
'pre_migrate', 'post_migrate')
Usage
from model_observer.model import ModelObserver
class Blog(Model, ModelObserver):
title = models.CharField(max_length=50)
def on_delete(self, **kwargs):
print('Object was deleted!')
print('self', self.__dict__)
print('kwargs', kwargs)
def on_create(self, **kwargs):
print('Object was created!')
print('self', self.__dict__)
print('kwargs', kwargs)
def on_update(self, **kwargs):
print('Object was updated!')
print('self', self.__dict__)
print('kwargs', kwargs)
Create object
from blogs.models import Blog
blog = Blog.objects.create(title='test1')
Output
Object was created!
self {'_state': <django.db.models.base.ModelState object at 0x0000013FDE855640>, 'id': 2, 'title': 'test1'}
kwargs {'signal': <django.db.models.signals.ModelSignal object at 0x0000013FDD6A93A0>, 'sender': <class 'blogs.models.Blog'>, 'instance': <Blog: Blog object (2)>, 'created': True, 'update_fields': None, 'raw': False, 'using': 'default'}
Update object
from blogs.models import Blog
blog = Blog.objects.get(pk=1)
blog.title = 'test 1!'
blog.save()
Output
Object was updated!
self {'_state': <django.db.models.base.ModelState object at 0x0000024B609A8FA0>, 'id': 1, 'title': 'test 1!', '_pre_save_instance': <Blog: Blog object (1)>, '_pre_delete_instance': <Blog: Blog object (1)>}
kwargs {'signal': <django.db.models.signals.ModelSignal object at 0x0000024B5F69FCD0>, 'sender': <class 'blogs.models.Blog'>, 'instance': <Blog: Blog object (1)>, 'created': False, 'update_fields': None, 'raw': False, 'using': 'default'}
Delete object
from blogs.models import Blog
blog = Blog.objects.get(pk=3)
blog.delete()
Output
Object was deleted!
self {'_state': <django.db.models.base.ModelState object at 0x00000182BA476AC0>, 'id': 3, 'title': 'test1'}
kwargs {'signal': <django.db.models.signals.ModelSignal object at 0x00000182B92985E0>, 'sender': <class 'blogs.models.Blog'>, 'instance': <Blog: Blog object (3)>, 'using': 'default'}
(1, {'blogs.Blog': 1})
Observe the object field
Integration
class Blog(models.Model, ModelObserver):
...
def title_changed(self, **kwargs):
print('Field `title` was changed!')
print('self', self.__dict__)
print('kwargs', kwargs)
instance = kwargs.get('instance') # Work with instance
...
from blogs.models import Blog
blog = Blog.objects.first()
blog.title = 'Test 2!'
blog.save()
Output
Field `title` was changed!
self {'_state': <django.db.models.base.ModelState object at 0x0000023ED4BF4700>, 'id': 4, 'title': 'Test 2!', '_pre_save_instance': <Blog: Blog object (4)>, '_pre_delete_instance': <Blog: Blog object (4)>}
kwargs {'signal': <django.db.models.signals.ModelSignal object at 0x0000023ED3A48280>, 'sender': <class 'blogs.models.Blog'>, 'instance': <Blog: Blog object (4)>, 'raw': False, 'using': 'default', 'update_fields': None}
Contributing
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.
Please make sure to update tests as appropriate.
License
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
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 model-observer-0.0.22.tar.gz.
File metadata
- Download URL: model-observer-0.0.22.tar.gz
- Upload date:
- Size: 4.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.1 importlib_metadata/4.0.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.60.0 CPython/3.9.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1ca4ce1b046b2d28a0d9e65eeaa3a0fccf93aa88b9430a01aabd0798454c2f12
|
|
| MD5 |
1696cec9e3255ade8f091cbecc2f0830
|
|
| BLAKE2b-256 |
345d9b2b8456d9307a23b7495851a40bae4ee63753ec4db95207a53a670f3d9c
|
File details
Details for the file model_observer-0.0.22-py3-none-any.whl.
File metadata
- Download URL: model_observer-0.0.22-py3-none-any.whl
- Upload date:
- Size: 4.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.1 importlib_metadata/4.0.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.60.0 CPython/3.9.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c636ca7626770f16c73c2782b68b763cce6c3a097849d749b33d5deae1f5214b
|
|
| MD5 |
83c93ae4791b87e0275ca3f7b91b9b91
|
|
| BLAKE2b-256 |
7034da8ae52d0c004cfb5c837096149b6b85af1d9e44103fdd4e49485fd7a4ad
|