From f7318a41b7986e678aa35c7b0f181784b606c471 Mon Sep 17 00:00:00 2001 From: David Taylor Date: Fri, 22 May 2015 23:53:47 +0100 Subject: [PATCH] Restructured comparison logic so model references are used --- RIGS/versioning.py | 33 +++++++++++++++++++++------------ 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/RIGS/versioning.py b/RIGS/versioning.py index dee6600b..34f69027 100644 --- a/RIGS/versioning.py +++ b/RIGS/versioning.py @@ -11,9 +11,7 @@ from django.contrib import messages # Versioning import reversion -import diff_match_patch import simplejson -from reversion.helpers import generate_patch_html from reversion.models import Version from django.contrib.contenttypes.models import ContentType # Used to lookup the content_type @@ -25,23 +23,34 @@ logger = logging.getLogger('tec.pyrigs') def compare_events(obj1, obj2, excluded_keys=[]): + theFields = obj1._meta.fields + d1, d2 = obj1, obj2 - key, old, new = [],[],[] - for k,v in d1.items(): + field, old, new = [],[],[] + + for thisField in theFields: + k = thisField.name + v1 = getattr(d1, k) + v2 = getattr(d2, k) + logger.info('k:'+str(k)+" v1:"+str(v1)+" v2:"+str(v2)) if k in excluded_keys: continue try: - if v != d2[k]: - key.append(models.Event._meta.get_field_by_name(k)[0].verbose_name) - old.append(v) - new.append(d2[k]) + if v1 != v2: + field.append(thisField.verbose_name) + old.append(v1) + new.append(v2) except KeyError: - old.append({k: v}) + field.append(thisField.verbose_name) + old.append(v1) + new.append(v2) except TypeError: # avoids issues with naive vs tz-aware datetimes - old.append({k: v}) + field.append(thisField.verbose_name) + old.append(v1) + new.append(v2) - return zip(key,old,new) + return zip(field,old,new) def compare_items(old, new): @@ -138,7 +147,7 @@ def get_changes_for_version(thisVersion, previousVersion=None): compare['revision'] = thisVersion.revision if previousVersion: - compare['changes'] = compare_events(previousVersion.field_dict,thisVersion.field_dict) + compare['changes'] = compare_events(previousVersion.object_version.object, thisVersion.object_version.object) compare['item_changes'] = compare_items(previousVersion, thisVersion) else: compare['changes'] = [["(initial version)",None,"Event Created"]]