Skip to content

Commit

Permalink
just run black
Browse files Browse the repository at this point in the history
  • Loading branch information
jedie committed Jan 18, 2019
1 parent f55d1ee commit 955852d
Show file tree
Hide file tree
Showing 27 changed files with 355 additions and 489 deletions.
1 change: 1 addition & 0 deletions README.creole
Original file line number Diff line number Diff line change
Expand Up @@ -261,6 +261,7 @@ Maybe other versions are compatible, too.
== Changelog ==

* *dev* [[https://github.com/jedie/django-reversion-compare/compare/v0.8.6...master|compare v0.8.6...master]]
** reformat code with 'black'
** TBC
* v0.8.6 - 04.01.2019 [[https://github.com/jedie/django-reversion-compare/compare/v0.8.5...v0.8.6|compare v0.8.5...v0.8.6]]
** Bugfix: [[https://github.com/jedie/django-reversion-compare/pull/110|Use ".pk" instead of ".id" when referring to related object.]] contributed by [[https://github.com/peterlisak|Peter Lisák]]
Expand Down
61 changes: 28 additions & 33 deletions reversion_compare/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,14 @@
from django.conf import settings
from django.conf.urls import url
from django.contrib import admin

try:
from django.contrib.admin.utils import unquote, quote
except ImportError: # Django < 1.7 # pragma: no cover
from django.contrib.admin.util import unquote, quote
try:
from django.urls import reverse
except: # Django < 1.10 # pragma: no cover
except: # Django < 1.10 # pragma: no cover
from django.core.urlresolvers import reverse
from django.http import Http404
from django.shortcuts import get_object_or_404, render
Expand Down Expand Up @@ -91,9 +92,9 @@ def get_urls(self):
urls = super(BaseCompareVersionAdmin, self).get_urls()
admin_site = self.admin_site
opts = self.model._meta
info = opts.app_label, opts.model_name,
info = opts.app_label, opts.model_name
reversion_urls = [
url("^([^/]+)/history/compare/$", admin_site.admin_view(self.compare_view), name='%s_%s_compare' % info),
url("^([^/]+)/history/compare/$", admin_site.admin_view(self.compare_view), name="%s_%s_compare" % info)
]
return reversion_urls + urls

Expand All @@ -105,14 +106,14 @@ def _get_action_list(self, request, object_id, extra_context=None):
{
"version": version,
"revision": version.revision,
"url": reverse("%s:%s_%s_revision" % (self.admin_site.name, opts.app_label, opts.model_name),
args=(quote(version.object_id), version.id)),
"url": reverse(
"%s:%s_%s_revision" % (self.admin_site.name, opts.app_label, opts.model_name),
args=(quote(version.object_id), version.id),
),
}
for version
in self._order_version_queryset(Version.objects.get_for_object_reference(
self.model,
object_id,
).select_related("revision__user"))
for version in self._order_version_queryset(
Version.objects.get_for_object_reference(self.model, object_id).select_related("revision__user")
)
]
return action_list

Expand All @@ -134,11 +135,7 @@ def history_view(self, request, object_id, extra_context=None):
action_list[-2]["second"] = True

# Compile the context.
context = {
"action_list": action_list,
"comparable": comparable,
"compare_view": True,
}
context = {"action_list": action_list, "comparable": comparable, "compare_view": True}
context.update(extra_context or {})
return super(BaseCompareVersionAdmin, self).history_view(request, object_id, context)

Expand Down Expand Up @@ -188,54 +185,52 @@ def compare_view(self, request, object_id, extra_context=None):
"version1": version1,
"version2": version2,
"changelist_url": reverse("%s:%s_%s_changelist" % (self.admin_site.name, opts.app_label, opts.model_name)),
"change_url": reverse("%s:%s_%s_change" % (self.admin_site.name, opts.app_label, opts.model_name),
args=(quote(obj.pk),)),
"change_url": reverse(
"%s:%s_%s_change" % (self.admin_site.name, opts.app_label, opts.model_name), args=(quote(obj.pk),)
),
"original": obj,
"history_url": reverse("%s:%s_%s_history" % (self.admin_site.name, opts.app_label, opts.model_name),
args=(quote(obj.pk),)),
"history_url": reverse(
"%s:%s_%s_history" % (self.admin_site.name, opts.app_label, opts.model_name), args=(quote(obj.pk),)
),
}

# don't use urlencode with dict for generate prev/next-urls
# Otherwise we can't unitests it!
if next_version:
next_url = "?version_id1=%i&version_id2=%i" % (
version2.id, next_version.id
)
context.update({'next_url': next_url})
next_url = "?version_id1=%i&version_id2=%i" % (version2.id, next_version.id)
context.update({"next_url": next_url})
if prev_version:
prev_url = "?version_id1=%i&version_id2=%i" % (
prev_version.id, version1.id
)
context.update({'prev_url': prev_url})
prev_url = "?version_id1=%i&version_id2=%i" % (prev_version.id, version1.id)
context.update({"prev_url": prev_url})

extra_context = extra_context or {}
context.update(extra_context)
return render(request, self.compare_template or self._get_template_list("compare.html"),
context)
return render(request, self.compare_template or self._get_template_list("compare.html"), context)


class CompareVersionAdmin(CompareMethodsMixin, BaseCompareVersionAdmin):
"""
expand the base class with prepared compare methods. This is the
class to inherit
"""

pass


if hasattr(settings, "ADD_REVERSION_ADMIN") and settings.ADD_REVERSION_ADMIN:

class RevisionAdmin(admin.ModelAdmin):
list_display = ("id", "date_created", "user", "comment")
list_display_links = ("date_created",)
date_hierarchy = 'date_created'
ordering = ('-date_created',)
date_hierarchy = "date_created"
ordering = ("-date_created",)
list_filter = ("user", "comment")
search_fields = ("user", "comment")

admin.site.register(Revision, RevisionAdmin)


class VersionAdmin(admin.ModelAdmin):
list_display = ("object_repr", "revision", "object_id", "content_type", "format",)
list_display = ("object_repr", "revision", "object_id", "content_type", "format")
list_display_links = ("object_repr", "object_id")
list_filter = ("content_type", "format")
search_fields = ("object_repr", "serialized_data")
Expand Down
78 changes: 34 additions & 44 deletions reversion_compare/compare.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,24 +28,25 @@ class FieldVersionDoesNotExist(object):
"""
Sentinel object to handle missing fields
"""

def __str__(self):
return force_text(_("Field didn't exist!"))


DOES_NOT_EXIST = FieldVersionDoesNotExist()


class CompareObject(object):

def __init__(self, field, field_name, obj, version_record, follow):
self.field = field
self.field_name = field_name
self.obj = obj
self.version_record = version_record # instance of reversion.models.Version()
self.follow = follow
# try and get a value, if none punt
self.compare_foreign_objects_as_id = getattr(settings, 'REVERSION_COMPARE_FOREIGN_OBJECTS_AS_ID', False)
self.compare_foreign_objects_as_id = getattr(settings, "REVERSION_COMPARE_FOREIGN_OBJECTS_AS_ID", False)
if self.compare_foreign_objects_as_id:
self.value = version_record.field_dict.get(getattr(field, 'attname', field_name), DOES_NOT_EXIST)
self.value = version_record.field_dict.get(getattr(field, "attname", field_name), DOES_NOT_EXIST)
else:
self.value = version_record.field_dict.get(field_name, DOES_NOT_EXIST)

Expand All @@ -57,8 +58,7 @@ def _obj_repr(self, obj):
return repr(obj)

def _choices_repr(self, obj):
return force_text(dict(self.field.flatchoices).get(obj, obj),
strings_only=True)
return force_text(dict(self.field.flatchoices).get(obj, obj), strings_only=True)

def _to_string_ManyToManyField(self):
return ", ".join([self._obj_repr(item) for item in self.get_many_to_many()])
Expand All @@ -85,15 +85,15 @@ def __cmp__(self, other):
raise NotImplemented()

def __eq__(self, other):
if hasattr(self.field, 'get_internal_type'):
if hasattr(self.field, "get_internal_type"):
assert self.field.get_internal_type() != "ManyToManyField"

if self.value != other.value:
return False

# see - https://hynek.me/articles/hasattr/
if not self.compare_foreign_objects_as_id:
internal_type = getattr(self.field, 'get_internal_type', None)
internal_type = getattr(self.field, "get_internal_type", None)
if internal_type is None or internal_type() == "ForeignKey": # FIXME!
if self.version_record.field_dict != other.version_record.field_dict:
return False
Expand All @@ -104,13 +104,13 @@ def __ne__(self, other):
return not self.__eq__(other)

def get_object_version(self):
if hasattr(self.version_record, '_object_version'):
return getattr(self.version_record, '_object_version')
if hasattr(self.version_record, "_object_version"):
return getattr(self.version_record, "_object_version")
else:
return getattr(self.version_record, 'object_version')
return getattr(self.version_record, "object_version")

def get_related(self):
if getattr(self.field, 'related_model', None):
if getattr(self.field, "related_model", None):
obj = self.get_object_version().object
try:
return getattr(obj, self.field.name, None)
Expand All @@ -122,23 +122,23 @@ def get_reverse_foreign_key(self):
if self.field.related_name and hasattr(obj, self.field.related_name):
if isinstance(self.field, models.fields.related.OneToOneRel):
try:
ids = {force_text(getattr(obj, force_text(self.field.related_name)).pk), }
ids = {force_text(getattr(obj, force_text(self.field.related_name)).pk)}
except ObjectDoesNotExist:
ids = set()
else:
# If there is a _ptr this is a multi-inheritance table and inherits from a non-abstract class
ids = {force_text(v.pk) for v in getattr(obj, force_text(self.field.related_name)).all()}
if not ids and any([f.name.endswith('_ptr') for f in obj._meta.get_fields()]):
if not ids and any([f.name.endswith("_ptr") for f in obj._meta.get_fields()]):
# If there is a _ptr this is a multi-inheritance table and inherits from a non-abstract class
# lets try and get the parent items associated entries for this field
others = self.version_record.revision.version_set.filter(
object_id=self.version_record.object_id
).all()
for p in others:
if hasattr(p, '_object_version'):
p_obj = getattr(p, '_object_version').object
if hasattr(p, "_object_version"):
p_obj = getattr(p, "_object_version").object
else:
p_obj = getattr(p, 'object_version').object
p_obj = getattr(p, "object_version").object
if type(p_obj) != type(obj) and hasattr(p_obj, force_text(self.field.related_name)):
ids = {force_text(v.pk) for v in getattr(p_obj, force_text(self.field.related_name)).all()}
else:
Expand Down Expand Up @@ -174,9 +174,9 @@ def get_many_to_something(self, target_ids, related_model, is_reverse=False):

# Get a queryset with all related objects.
versions = {
ver.object_id: ver for ver in old_revision.version_set.filter(
content_type=ContentType.objects.get_for_model(related_model),
object_id__in=target_ids
ver.object_id: ver
for ver in old_revision.version_set.filter(
content_type=ContentType.objects.get_for_model(related_model), object_id__in=target_ids
).all()
}

Expand Down Expand Up @@ -217,21 +217,17 @@ def get_debug(self): # pragma: no cover
"field internal type: %r" % self.field.get_internal_type(),
"field_dict.........: %s" % repr(self.version_record.field_dict),
"obj................: %r (pk: %s, id: %s)" % (self.obj, self.obj.pk, id(self.obj)),
"version............: %r (pk: %s, id: %s)" % (self.version_record, self.version_record.pk, id(self.version_record)),
"version............: %r (pk: %s, id: %s)"
% (self.version_record, self.version_record.pk, id(self.version_record)),
"value..............: %r" % self.value,
"to string..........: %s" % repr(self.to_string()),
"related............: %s" % repr(self.get_related()),
]
m2m_versions, missing_objects, missing_ids, deleted = self.get_many_to_many()
if m2m_versions or missing_objects or missing_ids:
result.append(
"many-to-many.......: %s" % ", ".join(
["%s (%s)" % (
item,
item.type
) for item in m2m_versions]
)
)
"many-to-many.......: %s" % ", ".join(["%s (%s)" % (item, item.type) for item in m2m_versions])
)

if missing_objects:
result.append("missing m2m objects: %s" % repr(missing_objects))
Expand Down Expand Up @@ -261,7 +257,7 @@ def __init__(self, field, field_name, obj, version1, version2, is_reversed):
self.obj = obj

# is a related field (ForeignKey, ManyToManyField etc.)
self.is_related = getattr(self.field, 'related_model', None) is not None
self.is_related = getattr(self.field, "related_model", None) is not None
self.is_reversed = is_reversed
if not self.is_related:
self.follow = None
Expand All @@ -283,14 +279,18 @@ def changed(self):
""" return True if at least one field has changed values. """

info = None
if hasattr(self.field, 'get_internal_type') and self.field.get_internal_type() == "ManyToManyField":
if hasattr(self.field, "get_internal_type") and self.field.get_internal_type() == "ManyToManyField":
info = self.get_m2m_change_info()
elif self.is_reversed:
info = self.get_m2o_change_info()
if info:
keys = (
"changed_items", "removed_items", "added_items",
"removed_missing_objects", "added_missing_objects", 'deleted_items'
"changed_items",
"removed_items",
"added_items",
"removed_missing_objects",
"added_missing_objects",
"deleted_items",
)
for key in keys:
if info[key]:
Expand Down Expand Up @@ -342,21 +342,11 @@ def get_m2s_change_info(self, obj1_data, obj2_data):
added_items = []
same_items = []

same_missing_objects_dict = {
k: v for k, v in
missing_objects_dict1.items()
if k in missing_objects_dict2
}
same_missing_objects_dict = {k: v for k, v in missing_objects_dict1.items() if k in missing_objects_dict2}
removed_missing_objects_dict = {
k: v for k, v in
missing_objects_dict1.items()
if k not in missing_objects_dict2
}
added_missing_objects_dict = {
k: v for k, v in
missing_objects_dict2.items()
if k not in missing_objects_dict1
k: v for k, v in missing_objects_dict1.items() if k not in missing_objects_dict2
}
added_missing_objects_dict = {k: v for k, v in missing_objects_dict2.items() if k not in missing_objects_dict1}

# logger.debug("same_missing_objects: %s", same_missing_objects_dict)
# logger.debug("removed_missing_objects: %s", removed_missing_objects_dict)
Expand Down
Loading

0 comments on commit 955852d

Please sign in to comment.