Пример #1
0
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>")
Пример #2
0
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>")
Пример #3
0
    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)
Пример #4
0
    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)
Пример #5
0
    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)
Пример #6
0
    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)
Пример #7
0
    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)
Пример #8
0
    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)
Пример #9
0
    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)
Пример #10
0
    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)