Skip to content

Commit

Permalink
Merge c427a18 into 304bb18
Browse files Browse the repository at this point in the history
  • Loading branch information
Michael Shannon committed Jun 29, 2016
2 parents 304bb18 + c427a18 commit 54458a1
Show file tree
Hide file tree
Showing 24 changed files with 338 additions and 393 deletions.
4 changes: 3 additions & 1 deletion .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,11 @@ env:
- DJANGO='1.8' REVERSION='1.9' EXTRA=''
- DJANGO='1.8' REVERSION='1.10' EXTRA=''
- DJANGO='1.9' REVERSION='1.10' EXTRA=''
- DJANGO='1.9' REVERSION='2.0.4' EXTRA=''
- DJANGO='1.8' REVERSION='1.9' EXTRA='diff-match-patch'
- DJANGO='1.8' REVERSION='1.10' EXTRA='diff-match-patch'
- DJANGO='1.8' REVERSION='1.10' EXTRA='diff-match-patch'
- DJANGO='1.9' REVERSION='1.10' EXTRA='diff-match-patch'
- DJANGO='1.9' REVERSION='2.0.4' EXTRA='diff-match-patch'

install:
- pip install --upgrade pip
Expand Down
2 changes: 2 additions & 0 deletions AUTHORS
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@ CONTRIBUTORS are and/or have been (alphabetic order):
Github: <https://github.com/amureki>
* Spencer, Samuel
Github: <https://github.com/LegoStormtroopr>
* Shannon, Michael
Github: <https://github.com/mshannon1123>
* C. Barrionuevo da Luz, Fabio
Github: <https://github.com/luzfcb>
* Wickström, Frank
Expand Down
6 changes: 3 additions & 3 deletions reversion_compare/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@
import reversion # django-reversion <= 1.9

from reversion.admin import VersionAdmin

from reversion_compare import reversion_api
from reversion_compare.forms import SelectDiffForm
from reversion_compare.mixins import CompareMixin, CompareMethodsMixin

Expand Down Expand Up @@ -111,7 +111,7 @@ def _get_action_list(self, request, object_id, extra_context=None):
args=(quote(version.object_id), version.id)),
}
for version
in self._order_version_queryset(self.revision_manager.get_for_object_reference(
in self._order_version_queryset(reversion_api.get_for_object_reference(
self.model,
object_id,
).select_related("revision__user"))
Expand Down Expand Up @@ -168,7 +168,7 @@ def compare_view(self, request, object_id, extra_context=None):

object_id = unquote(object_id) # Underscores in primary key get quoted to "_5F"
obj = get_object_or_404(self.model, pk=object_id)
queryset = self.revision_manager.get_for_object(obj)
queryset = reversion_api.get_for_object(obj)
version1 = get_object_or_404(queryset, pk=version_id1)
version2 = get_object_or_404(queryset, pk=version_id2)

Expand Down
281 changes: 125 additions & 156 deletions reversion_compare/compare.py

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions reversion_compare/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

from django import forms


class SelectDiffForm(forms.Form):
version_id1 = forms.IntegerField(min_value=1)
version_id2 = forms.IntegerField(min_value=1)
5 changes: 1 addition & 4 deletions reversion_compare/helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@
:license: GNU GPL v3 or above, see LICENSE for more details.
"""


import difflib
import logging

Expand All @@ -38,7 +37,6 @@
else:
google_diff_match_patch = True
dmp = diff_match_patch()
#google_diff_match_patch = False # manually disable, for testing


def highlight_diff(diff_text):
Expand Down Expand Up @@ -220,10 +218,9 @@ class PatchedModelAdmin(AdminClass, ModelAdmin):
admin_site.register(model, PatchedModelAdmin)



if __name__ == "__main__":
import doctest
print(doctest.testmod(
# verbose=True
verbose=False
# verbose=True
))
21 changes: 9 additions & 12 deletions reversion_compare/mixins.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,12 @@
from django.template.loader import render_to_string

from reversion_compare.helpers import html_diff
from reversion.revisions import default_revision_manager

from reversion_compare.compare import CompareObjects


class CompareMixin(object, ):
"""A mixin to add comparison capabilities to your views"""

revision_manager = default_revision_manager

# list/tuple of field names for the compare view. Set to None for all existing fields
compare_fields = None

Expand All @@ -45,8 +43,8 @@ def _get_compare(self, obj_compare):
"""

def _get_compare_func(suffix):
func_name = "compare_%s" % suffix
# logger.debug("func_name: %s", func_name)
func_name = "compare_%s" % suffix
if hasattr(self, func_name):
func = getattr(self, func_name)
return func
Expand Down Expand Up @@ -102,7 +100,7 @@ def compare(self, obj, version1, version2):
)
if isinstance(f, models.ForeignKey) and f not in fields:
self.reverse_fields.append(f.rel)
#print(self.reverse_fields)

fields += self.reverse_fields

has_unfollowed_fields = False
Expand All @@ -121,8 +119,8 @@ def compare(self, obj, version1, version2):
continue

is_reversed = field in self.reverse_fields
obj_compare = CompareObjects(field, field_name, obj, version1, version2, self.revision_manager, is_reversed)
#obj_compare.debug()
obj_compare = CompareObjects(field, field_name, obj, version1, version2, is_reversed)
# obj_compare.debug()

is_related = obj_compare.is_related
follow = obj_compare.follow
Expand Down Expand Up @@ -171,9 +169,8 @@ def generic_add_remove(self, raw_value1, raw_value2, value1, value2):

def compare_ForeignKey(self, obj_compare):
related1, related2 = obj_compare.get_related()
obj_compare.debug()
# obj_compare.debug()
value1, value2 = str(related1), str(related2)
# value1, value2 = repr(related1), repr(related2)
return self.generic_add_remove(related1, related2, value1, value2)

def simple_compare_ManyToManyField(self, obj_compare):
Expand Down Expand Up @@ -215,15 +212,15 @@ def compare_FileField(self, obj_compare):
return self.generic_add_remove(value1, value2, value1, value2)

def compare_DateTimeField(self, obj_compare):
''' compare all model datetime field in ISO format '''
""" compare all model datetime field in ISO format """
context = {
"date1": obj_compare.value1,
"date2": obj_compare.value2,
}
return render_to_string("reversion-compare/compare_DateTimeField.html", context)

def compare_BooleanField(self, obj_compare):
''' compare booleans as a complete field, rather than as a string '''
""" compare booleans as a complete field, rather than as a string """
context = {
"bool1": obj_compare.value1,
"bool2": obj_compare.value2,
Expand Down
27 changes: 19 additions & 8 deletions reversion_compare/reversion_api.py
Original file line number Diff line number Diff line change
@@ -1,19 +1,30 @@

import reversion
if reversion.__version__ > (1,10):
from reversion.models import Revision, Version

if reversion.__version__ > (2, 0):
from reversion import revisions as reversion
from reversion.revisions import (
register, unregister, is_registered,
get_for_object, get_registered_models, get_deleted,
create_revision, set_comment
get_registered_models,
create_revision, set_comment, _get_options
)
get_for_object_reference = Version.objects.get_for_object_reference
get_for_object = Version.objects.get_for_object
get_deleted = Version.objects.get_deleted
elif reversion.__version__ > (1, 10):
from reversion import revisions as reversion
from reversion.revisions import (
register, unregister, is_registered,
get_for_object, get_for_object_reference, get_registered_models, get_deleted,
create_revision, set_comment, default_revision_manager
)
_get_options = default_revision_manager.get_adapter
else:
# django-reversion <= 1.9
from reversion import (
register, unregister, is_registered,
get_for_object, get_registered_models, get_deleted,
create_revision, set_comment
get_for_object, get_for_object_reference, get_registered_models, get_deleted,
create_revision, set_comment, default_revision_manager
)
_get_options = default_revision_manager.get_adapter


from reversion.models import Revision, Version, has_int_pk
8 changes: 4 additions & 4 deletions reversion_compare/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,11 @@
from django.shortcuts import get_object_or_404
from django.views.generic.detail import DetailView

from reversion_compare import reversion_api
from reversion_compare.forms import SelectDiffForm
from reversion_compare.mixins import CompareMixin, CompareMethodsMixin


class HistoryCompareDetailView(CompareMixin, CompareMethodsMixin, DetailView):
"""This class can be used to add a non-admin view for comparing your object's versions.
Expand Down Expand Up @@ -49,14 +51,13 @@ class SimpleModelHistoryCompareView(HistoryCompareDetailView):
"""

def _get_action_list(self, ):
opts = self.model._meta
action_list = [
{
"version": version,
"revision": version.revision,
}
for version
in self._order_version_queryset(self.revision_manager.get_for_object(
in self._order_version_queryset(reversion_api.get_for_object(
self.get_object(),
).select_related("revision__user"))
]
Expand Down Expand Up @@ -93,7 +94,7 @@ def get_context_data(self, **kwargs):
version_id1, version_id2 = version_id2, version_id1

obj = self.get_object()
queryset = self.revision_manager.get_for_object(obj)
queryset = reversion_api.get_for_object(obj)
version1 = get_object_or_404(queryset, pk=version_id1)
version2 = get_object_or_404(queryset, pk=version_id2)

Expand All @@ -120,7 +121,6 @@ def get_context_data(self, **kwargs):
)
context.update({'prev_url': prev_url})


# Compile the context.
context.update({
"action_list": action_list,
Expand Down
7 changes: 0 additions & 7 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -182,10 +182,6 @@ def rmtree(path):

sys.exit(0)





def get_authors():
try:
with open(os.path.join(PACKAGE_ROOT, "AUTHORS"), "r") as f:
Expand Down Expand Up @@ -217,12 +213,9 @@ def get_authors():
],
zip_safe=False,
classifiers=[
# "Development Status :: 4 - Beta",
"Development Status :: 5 - Production/Stable",
"Environment :: Web Environment",
"Intended Audience :: Developers",
# "Intended Audience :: Education",
# "Intended Audience :: End Users/Desktop",
"License :: OSI Approved :: GNU General Public License (GPL)",
"Programming Language :: Python",
"Programming Language :: Python :: 2.7",
Expand Down
13 changes: 4 additions & 9 deletions tests/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,18 +12,13 @@

from __future__ import unicode_literals, print_function


from reversion.models import Revision, Version
from reversion.revisions import RevisionManager

from django.contrib import admin
from reversion_compare.admin import CompareVersionAdmin

from .models import SimpleModel, Factory, Car, Person, Pet,\
VariantModel, CustomModel, Identity



class SimpleModelAdmin(CompareVersionAdmin):
pass
admin.site.register(SimpleModel, SimpleModelAdmin)
Expand All @@ -33,6 +28,7 @@ class FactoryAdmin(CompareVersionAdmin):
pass
admin.site.register(Factory, FactoryAdmin)


class CarAdmin(CompareVersionAdmin):
pass
admin.site.register(Car, CarAdmin)
Expand All @@ -42,6 +38,7 @@ class PersonAdmin(CompareVersionAdmin):
pass
admin.site.register(Person, PersonAdmin)


class PetAdmin(CompareVersionAdmin):
pass
admin.site.register(Pet, PetAdmin)
Expand All @@ -52,16 +49,14 @@ class VariantModelAdmin(CompareVersionAdmin):
admin.site.register(VariantModel, VariantModelAdmin)


custom_revision_manager = RevisionManager("custom")

class CustomModelAdmin(CompareVersionAdmin):
revision_manager = custom_revision_manager
pass

admin.site.register(CustomModel, CustomModelAdmin)

admin.site.register(Identity, CustomModelAdmin)



"""
class RelatedModelInline(admin.StackedInline):
model = RelatedModel
Expand Down

0 comments on commit 54458a1

Please sign in to comment.