mirror of
https://github.com/ansible/awx.git
synced 2026-03-31 07:45:08 -02:30
Initial backend implementation for AC-25, activity stream/audit love
This commit is contained in:
@@ -10,6 +10,9 @@ import subprocess
|
||||
import sys
|
||||
import urlparse
|
||||
|
||||
# Django
|
||||
from django.db.models import Model
|
||||
|
||||
# Django REST Framework
|
||||
from rest_framework.exceptions import ParseError, PermissionDenied
|
||||
|
||||
@@ -219,3 +222,36 @@ def update_scm_url(scm_type, url, username=True, password=True):
|
||||
new_url = urlparse.urlunsplit([parts.scheme, netloc, parts.path,
|
||||
parts.query, parts.fragment])
|
||||
return new_url
|
||||
|
||||
def model_instance_diff(old, new):
|
||||
"""
|
||||
Calculate the differences between two model instances. One of the instances may be None (i.e., a newly
|
||||
created model or deleted model). This will cause all fields with a value to have changed (from None).
|
||||
"""
|
||||
if not(old is None or isinstance(old, Model)):
|
||||
raise TypeError('The supplied old instance is not a valid model instance.')
|
||||
if not(new is None or isinstance(new, Model)):
|
||||
raise TypeError('The supplied new instance is not a valid model instance.')
|
||||
|
||||
diff = {}
|
||||
|
||||
if old is not None and new is not None:
|
||||
fields = set(old._meta.fields + new._meta.fields)
|
||||
elif old is not None:
|
||||
fields = set(old._meta.fields)
|
||||
elif new is not None:
|
||||
fields = set(new._meta.fields)
|
||||
else:
|
||||
fields = set()
|
||||
|
||||
for field in fields:
|
||||
old_value = str(getattr(old, field.name, None))
|
||||
new_value = str(getattr(new, field.name, None))
|
||||
|
||||
if old_value != new_value:
|
||||
diff[field.name] = (old_value, new_value)
|
||||
|
||||
if len(diff) == 0:
|
||||
diff = None
|
||||
|
||||
return diff
|
||||
|
||||
Reference in New Issue
Block a user