Ejemplo n.º 1
0
 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
Ejemplo n.º 2
0
 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()