From 6f1bb68762a29c6346a450f5bb1d9cfe6737dc9c Mon Sep 17 00:00:00 2001 From: James Kizer Date: Wed, 5 Jun 2019 17:24:38 -0600 Subject: [PATCH 1/2] added support for custom json object serializer --- easyaudit/settings.py | 3 +++ easyaudit/signals/model_signals.py | 14 +++++++++++--- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/easyaudit/settings.py b/easyaudit/settings.py index 888de635..d3ce89d1 100644 --- a/easyaudit/settings.py +++ b/easyaudit/settings.py @@ -103,3 +103,6 @@ def get_model_list(class_list): CRUD_EVENT_LIST_FILTER = getattr(settings, 'DJANGO_EASY_AUDIT_CRUD_EVENT_LIST_FILTER', ['event_type', 'content_type', 'user', 'datetime', ]) LOGIN_EVENT_LIST_FILTER = getattr(settings, 'DJANGO_EASY_AUDIT_LOGIN_EVENT_LIST_FILTER', ['login_type', 'user', 'datetime', ]) REQUEST_EVENT_LIST_FILTER = getattr(settings, 'DJANGO_EASY_AUDIT_REQUEST_EVENT_LIST_FILTER', ['method', 'user', 'datetime', ]) + +# JSON object representation serializer override +CRUD_OBJECT_JSON_REPR_SERIALIZER_OVERRIDE = getattr(settings, 'DJANGO_EASY_AUDIT_CRUD_OBJECT_JSON_REPR_SERIALIZER_OVERRIDE', None) \ No newline at end of file diff --git a/easyaudit/signals/model_signals.py b/easyaudit/signals/model_signals.py index 60a796e2..4678c215 100644 --- a/easyaudit/signals/model_signals.py +++ b/easyaudit/signals/model_signals.py @@ -14,7 +14,8 @@ get_current_user from easyaudit.models import CRUDEvent from easyaudit.settings import REGISTERED_CLASSES, UNREGISTERED_CLASSES, \ - WATCH_MODEL_EVENTS, CRUD_DIFFERENCE_CALLBACKS + WATCH_MODEL_EVENTS, CRUD_DIFFERENCE_CALLBACKS,\ + CRUD_OBJECT_JSON_REPR_SERIALIZER_OVERRIDE from easyaudit.utils import model_delta logger = logging.getLogger(__name__) @@ -53,7 +54,10 @@ def pre_save(sender, instance, raw, using, update_fields, **kwargs): if not should_audit(instance): return False try: - object_json_repr = serializers.serialize("json", [instance]) + if CRUD_OBJECT_JSON_REPR_SERIALIZER_OVERRIDE != None: + object_json_repr = CRUD_OBJECT_JSON_REPR_SERIALIZER_OVERRIDE(instance) + else: + object_json_repr = serializers.serialize("json", [instance]) except Exception: # We need a better way for this to work. ManyToMany will fail on pre_save on create return None @@ -122,7 +126,11 @@ def post_save(sender, instance, created, raw, using, update_fields, **kwargs): with transaction.atomic(): if not should_audit(instance): return False - object_json_repr = serializers.serialize("json", [instance]) + + if CRUD_OBJECT_JSON_REPR_SERIALIZER_OVERRIDE != None: + object_json_repr = CRUD_OBJECT_JSON_REPR_SERIALIZER_OVERRIDE(instance) + else: + object_json_repr = serializers.serialize("json", [instance]) # created or updated? if created: From c9e01f9938c47324a2f84f19117a8538e693c24f Mon Sep 17 00:00:00 2001 From: James Kizer Date: Wed, 5 Jun 2019 17:54:45 -0600 Subject: [PATCH 2/2] Added support for a model delta callback --- easyaudit/settings.py | 4 +++- easyaudit/signals/model_signals.py | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/easyaudit/settings.py b/easyaudit/settings.py index d3ce89d1..c1bcfeeb 100644 --- a/easyaudit/settings.py +++ b/easyaudit/settings.py @@ -105,4 +105,6 @@ def get_model_list(class_list): REQUEST_EVENT_LIST_FILTER = getattr(settings, 'DJANGO_EASY_AUDIT_REQUEST_EVENT_LIST_FILTER', ['method', 'user', 'datetime', ]) # JSON object representation serializer override -CRUD_OBJECT_JSON_REPR_SERIALIZER_OVERRIDE = getattr(settings, 'DJANGO_EASY_AUDIT_CRUD_OBJECT_JSON_REPR_SERIALIZER_OVERRIDE', None) \ No newline at end of file +CRUD_OBJECT_JSON_REPR_SERIALIZER_OVERRIDE = getattr(settings, 'DJANGO_EASY_AUDIT_CRUD_OBJECT_JSON_REPR_SERIALIZER_OVERRIDE', None) + +CRUD_OBJECT_MODEL_DELTA_CALLBACK = getattr(settings, 'DJANGO_EASY_AUDIT_CRUD_OBJECT_MODEL_DELTA_CALLBACK', None) \ No newline at end of file diff --git a/easyaudit/signals/model_signals.py b/easyaudit/signals/model_signals.py index 4678c215..1c3f973b 100644 --- a/easyaudit/signals/model_signals.py +++ b/easyaudit/signals/model_signals.py @@ -15,7 +15,7 @@ from easyaudit.models import CRUDEvent from easyaudit.settings import REGISTERED_CLASSES, UNREGISTERED_CLASSES, \ WATCH_MODEL_EVENTS, CRUD_DIFFERENCE_CALLBACKS,\ - CRUD_OBJECT_JSON_REPR_SERIALIZER_OVERRIDE + CRUD_OBJECT_JSON_REPR_SERIALIZER_OVERRIDE, CRUD_OBJECT_MODEL_DELTA_CALLBACK from easyaudit.utils import model_delta logger = logging.getLogger(__name__) @@ -71,6 +71,8 @@ def pre_save(sender, instance, raw, using, update_fields, **kwargs): if not created: old_model = sender.objects.get(pk=instance.pk) delta = model_delta(old_model, instance) + if CRUD_OBJECT_MODEL_DELTA_CALLBACK != None: + delta = CRUD_OBJECT_MODEL_DELTA_CALLBACK(old_model, instance, delta) changed_fields = json.dumps(delta) event_type = CRUDEvent.UPDATE