def get_data(self, original, current): """ Compares the data between the original object and the modified object. Generates diffs as necessary and checks to see if any modifications have occurred. """ object_id = current.id created = not bool(original) modified = not bool(original) data = {} for field in self.fields: if field.mode == ModelField.M2M: original_field = ":::".join(sorted(getattr(original, field.name, []))) current_field = ":::".join(sorted(getattr(current, field.name, []))) elif field.mode == ModelField.TEXT: original_field = getattr(original, field.name, None) current_field = getattr(current, field.name, None) elif field.mode == ModelField.OWNER: original_field = getattr(original, field.name, None).username current_filed = getattr(current, field.name, None).username if not created and original_field and current_field: if not original_field == current_field: if field.mode == ModelField.OWNER: data[field.name] = {'old_owner':original_field, 'new_owner':current_field} elif field.mode == ModelField.M2M: data[field.name] = generate_diff(original_field, current_field, True) else: data[field.name] = generate_diff(original_field, current_field) modified = True else: data[field.name] = None return created, object_id, json.dumps(data), modified
def test_base_handler(self): """ Tests the standard handler for data handling and tracked content registration. """ from django_contenthistory.handlers import BaseHistoryHandler handler = BaseHistoryHandler(ContentType.objects.get_for_model(User)) current_user = User(username = '******') final_user = User(username = '******') target_field = ModelField(name = 'username', mode = ModelField.TEXT, content = self.tracked_content) target_field.save() created, object_id, data, modified = handler.get_data(current_user, final_user) self.assertTrue(modified) self.assertFalse(created) self.assertEqual(json.loads(data).get('username'), utils.generate_diff('genghisu', 'hanbox')) target_field.delete()