mirror of
https://github.com/nottinghamtec/PyRIGS.git
synced 2026-01-23 16:32:15 +00:00
Restructured comparison logic so model references are used
This commit is contained in:
@@ -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"]]
|
||||||
|
|||||||
Reference in New Issue
Block a user