diff --git a/easyaudit/backends.py b/easyaudit/backends.py index b80c7243..d7be40a0 100644 --- a/easyaudit/backends.py +++ b/easyaudit/backends.py @@ -7,10 +7,22 @@ class ModelBackend: def request(self, request_info): - return RequestEvent.objects.create(**request_info) + try: + return RequestEvent.objects.create(**request_info) + except Exception as e: + logger.error(f"Error creating RequestEvent: {e}") + return None def crud(self, crud_info): - return CRUDEvent.objects.create(**crud_info) + try: + return CRUDEvent.objects.create(**crud_info) + except Exception as e: + logger.error(f"Error creating CRUDEvent: {e}") + return None def login(self, login_info): - return LoginEvent.objects.create(**login_info) \ No newline at end of file + try: + return LoginEvent.objects.create(**login_info) + except Exception as e: + logger.error(f"Error creating LoginEvent: {e}") + return None \ No newline at end of file diff --git a/easyaudit/signals/model_signals.py b/easyaudit/signals/model_signals.py index a76af3f0..d40fa38a 100644 --- a/easyaudit/signals/model_signals.py +++ b/easyaudit/signals/model_signals.py @@ -1,6 +1,7 @@ import json import logging +from django.db.utils import OperationalError from django.conf import settings from django.contrib.auth import get_user_model from django.contrib.auth.models import AnonymousUser @@ -18,7 +19,7 @@ from easyaudit.models import CRUDEvent from easyaudit.settings import REGISTERED_CLASSES, UNREGISTERED_CLASSES, \ WATCH_MODEL_EVENTS, CRUD_DIFFERENCE_CALLBACKS, LOGGING_BACKEND, \ - DATABASE_ALIAS + DATABASE_ALIAS, CRUD_EVENT_NO_CHANGED_FIELDS_SKIP from easyaudit.utils import get_m2m_field_name, model_delta logger = logging.getLogger(__name__) @@ -73,6 +74,9 @@ def pre_save(sender, instance, raw, using, update_fields, **kwargs): try: if not should_audit(instance): return False + + if CRUD_EVENT_NO_CHANGED_FIELDS_SKIP: + return with transaction.atomic(using=using): try: @@ -122,9 +126,9 @@ def crud_flow(): }) except Exception as e: try: - logger.exception( + logger.error( "easy audit had a pre_save exception on CRUDEvent creation. instance: {}, instance pk: {}".format( - instance, instance.pk)) + instance, instance.pk), exc_info=True) except Exception: pass if getattr(settings, "TEST", False): @@ -132,7 +136,7 @@ def crud_flow(): else: transaction.on_commit(crud_flow, using=using) except Exception: - logger.exception('easy audit had a pre-save exception.') + logger.error('easy audit had a pre-save exception.', exc_info=True) def post_save(sender, instance, created, raw, using, update_fields, **kwargs): @@ -181,17 +185,20 @@ def crud_flow(): }) except Exception as e: try: - logger.exception( + logger.error( "easy audit had a post_save exception on CRUDEvent creation. instance: {}, instance pk: {}".format( - instance, instance.pk)) + instance, instance.pk), exc_info=True) except Exception: pass if getattr(settings, "TEST", False): crud_flow() else: transaction.on_commit(crud_flow, using=using) - except Exception: - logger.exception('easy audit had a post-save exception.') + + except OperationalError as ex: + logger.error(f'Easy audit had a post-save OperationalError. {ex}', exc_info=True) + except Exception as ex: + logger.error(f'Easy audit had a post-save exception. {ex}', exc_info=True) def _m2m_rev_field_name(model1, model2): @@ -279,9 +286,9 @@ def crud_flow(): }) except Exception as e: try: - logger.exception( + logger.error( "easy audit had a m2m_changed exception on CRUDEvent creation. instance: {}, instance pk: {}".format( - instance, instance.pk)) + instance, instance.pk), exc_info=True) except Exception: pass @@ -289,8 +296,10 @@ def crud_flow(): crud_flow() else: transaction.on_commit(crud_flow, using=using) - except Exception: - logger.exception('easy audit had an m2m-changed exception.') + except OperationalError as ex: + logger.error(f'Easy audit had a m2m-changed OperationalError. {ex}', exc_info=True) + except Exception as ex: + logger.error(f'Easy audit had a m2m-changed exception. {ex}', exc_info=True) def post_delete(sender, instance, using, **kwargs): @@ -327,9 +336,9 @@ def crud_flow(): except Exception as e: try: - logger.exception( + logger.error( "easy audit had a post_delete exception on CRUDEvent creation. instance: {}, instance pk: {}".format( - instance, instance.pk)) + instance, instance.pk), exc_info=True) except Exception: pass @@ -337,8 +346,10 @@ def crud_flow(): crud_flow() else: transaction.on_commit(crud_flow, using=using) - except Exception: - logger.exception('easy audit had a post-delete exception.') + except OperationalError as ex: + logger.error(f'Easy audit had a post-delete OperationalError. {ex}', exc_info=True) + except Exception as ex: + logger.error(f'Easy audit had a post-delete exception. {ex}', exc_info=True) if WATCH_MODEL_EVENTS: