Restructured comparison logic so model references are used

This commit is contained in:
David Taylor
2015-05-22 23:53:47 +01:00
parent aca1cad6dc
commit 8b8d52944b

View File

@@ -11,9 +11,7 @@ from django.contrib import messages
# Versioning # Versioning
import reversion import reversion
import diff_match_patch
import simplejson import simplejson
from reversion.helpers import generate_patch_html
from reversion.models import Version from reversion.models import Version
from django.contrib.contenttypes.models import ContentType # Used to lookup the content_type 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=[]): def compare_events(obj1, obj2, excluded_keys=[]):
theFields = obj1._meta.fields
d1, d2 = obj1, obj2 d1, d2 = obj1, obj2
key, old, new = [],[],[] field, old, new = [],[],[]
for k,v in d1.items():
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: if k in excluded_keys:
continue continue
try: try:
if v != d2[k]: if v1 != v2:
key.append(models.Event._meta.get_field_by_name(k)[0].verbose_name) field.append(thisField.verbose_name)
old.append(v) old.append(v1)
new.append(d2[k]) new.append(v2)
except KeyError: except KeyError:
old.append({k: v}) field.append(thisField.verbose_name)
old.append(v1)
new.append(v2)
except TypeError: except TypeError:
# avoids issues with naive vs tz-aware datetimes # 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): def compare_items(old, new):
@@ -138,7 +147,7 @@ def get_changes_for_version(thisVersion, previousVersion=None):
compare['revision'] = thisVersion.revision compare['revision'] = thisVersion.revision
if previousVersion: 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) compare['item_changes'] = compare_items(previousVersion, thisVersion)
else: else:
compare['changes'] = [["(initial version)",None,"Event Created"]] compare['changes'] = [["(initial version)",None,"Event Created"]]