def _post_save(sender, **kwargs): try: from audit_tools.audit.models import ACTIONS from audit_tools.audit.tasks import save_model_action i = kwargs['instance'] # Model model = _extract_model_data(i) # Old and new content old_data = {} if id(i) in _CACHE: old_data = _CACHE[id(i)] del _CACHE[id(i)] new_data = serialize_model_instance(i) content = _extract_content_data(old_data, new_data) # Action if not old_data and new_data: action = ACTIONS.CREATE else: action = ACTIONS.UPDATE # Instance instance = _extract_instance_data(i) # Timestamp timestamp = datetime.datetime.now() model_action = { 'model': model, 'action': action, 'content': content, 'instance': instance, 'timestamp': timestamp, } # Process process = extract_process_data() try: # Get process process = cache.get_process(process) access = cache.get_last_access() if not settings.RUN_ASYNC: save_model_action(model_action, access, process) else: save_model_action.apply_async((model_action, access, process)) logger.info("<%s> Model:%s ID:%s", action.capitalize(), model['full_name'], instance['id']) except Exception: logger.exception("<%s> Model:%s ID:%s", action.capitalize(), model['full_name'], instance['id']) except Exception: logger.exception("<Post Save>")
def _post_save(sender, **kwargs): try: from audit_tools.audit.models import ACTIONS from audit_tools.audit.tasks import save_model_action i = kwargs["instance"] # Model model = _extract_model_data(i) # Old and new content old_data = {} if id(i) in _CACHE: old_data = _CACHE[id(i)] del _CACHE[id(i)] new_data = serialize_model_instance(i) content = _extract_content_data(old_data, new_data) # Action if not old_data and new_data: action = ACTIONS.CREATE else: action = ACTIONS.UPDATE # Instance instance = _extract_instance_data(i) # Timestamp timestamp = datetime.datetime.now() model_action = { "model": model, "action": action, "content": content, "instance": instance, "timestamp": timestamp, } # Process process = extract_process_data() try: # Get process process = cache.get_process(process) access = cache.get_last_access() if not settings.RUN_ASYNC: save_model_action(model_action, access, process) else: save_model_action.apply_async((model_action, access, process)) logger.info("<%s> Model:%s ID:%s", action.capitalize(), model["full_name"], instance["id"]) except Exception: logger.exception("<%s> Model:%s ID:%s", action.capitalize(), model["full_name"], instance["id"]) except Exception: logger.exception("<Post Save>")
def test_save_without_access(self, logger, access_klass, create_model_action): model_action = MagicMock() model_action.save.return_value = True create_model_action.return_value = model_action result = tasks.save_model_action(model_action, None, None) self.assertEqual(model_action.save.call_count, 1) self.assertTrue(result)
def test_save_fail(self, logger, access_klass, create_model_action): model_action = MagicMock() access = MagicMock() access.id = 1 access_klass.objects.get.side_effect = Exception result = tasks.save_model_action(model_action, access, None) self.assertEqual(logger.exception.call_count, 1) self.assertTrue(result)
def test_save_with_access_not_saved(self, logger, access_klass, create_model_action): model_action = MagicMock() model_action.save.return_value = True create_model_action.return_value = model_action access = MagicMock() access.save.return_value = True access_klass.objects.get.side_effect = (ValidationError, access) result = tasks.save_model_action(model_action, access, None) self.assertEqual(access.save.call_count, 1) self.assertTrue(result)
def test_save_with_access(self, logger, access_klass, create_model_action): model_action = MagicMock() model_action.save.return_value = True create_model_action.return_value = model_action access = MagicMock() access.id = 1 access.save.return_value = True access_klass.objects.get.return_value = access result = tasks.save_model_action(model_action, access, None) self.assertEqual(model_action.save.call_count, 1) self.assertTrue(result)