Skip to content

Commit 5817c80

Browse files
author
Michael Shannon
committed
Update for django-reversion 2.04
1 parent 304bb18 commit 5817c80

21 files changed

+242
-436
lines changed

reversion_compare/admin.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
import reversion # django-reversion <= 1.9
3535

3636
from reversion.admin import VersionAdmin
37-
37+
from reversion_compare import reversion_api
3838
from reversion_compare.forms import SelectDiffForm
3939
from reversion_compare.mixins import CompareMixin, CompareMethodsMixin
4040

@@ -111,7 +111,7 @@ def _get_action_list(self, request, object_id, extra_context=None):
111111
args=(quote(version.object_id), version.id)),
112112
}
113113
for version
114-
in self._order_version_queryset(self.revision_manager.get_for_object_reference(
114+
in self._order_version_queryset(reversion_api.get_for_object_reference(
115115
self.model,
116116
object_id,
117117
).select_related("revision__user"))
@@ -168,7 +168,7 @@ def compare_view(self, request, object_id, extra_context=None):
168168

169169
object_id = unquote(object_id) # Underscores in primary key get quoted to "_5F"
170170
obj = get_object_or_404(self.model, pk=object_id)
171-
queryset = self.revision_manager.get_for_object(obj)
171+
queryset = reversion_api.get_for_object(obj)
172172
version1 = get_object_or_404(queryset, pk=version_id1)
173173
version2 = get_object_or_404(queryset, pk=version_id2)
174174

reversion_compare/compare.py

Lines changed: 100 additions & 235 deletions
Large diffs are not rendered by default.

reversion_compare/forms.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
from django import forms
44

5+
56
class SelectDiffForm(forms.Form):
67
version_id1 = forms.IntegerField(min_value=1)
78
version_id2 = forms.IntegerField(min_value=1)

reversion_compare/helpers.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
:license: GNU GPL v3 or above, see LICENSE for more details.
1616
"""
1717

18-
1918
import difflib
2019
import logging
2120

@@ -38,7 +37,6 @@
3837
else:
3938
google_diff_match_patch = True
4039
dmp = diff_match_patch()
41-
#google_diff_match_patch = False # manually disable, for testing
4240

4341

4442
def highlight_diff(diff_text):
@@ -220,10 +218,8 @@ class PatchedModelAdmin(AdminClass, ModelAdmin):
220218
admin_site.register(model, PatchedModelAdmin)
221219

222220

223-
224221
if __name__ == "__main__":
225222
import doctest
226223
print(doctest.testmod(
227-
# verbose=True
228224
verbose=False
229225
))

reversion_compare/mixins.py

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,12 @@
1212
from django.template.loader import render_to_string
1313

1414
from reversion_compare.helpers import html_diff
15-
from reversion.revisions import default_revision_manager
16-
1715
from reversion_compare.compare import CompareObjects
1816

17+
1918
class CompareMixin(object, ):
2019
"""A mixin to add comparison capabilities to your views"""
21-
22-
revision_manager = default_revision_manager
20+
2321
# list/tuple of field names for the compare view. Set to None for all existing fields
2422
compare_fields = None
2523

@@ -46,7 +44,6 @@ def _get_compare(self, obj_compare):
4644

4745
def _get_compare_func(suffix):
4846
func_name = "compare_%s" % suffix
49-
# logger.debug("func_name: %s", func_name)
5047
if hasattr(self, func_name):
5148
func = getattr(self, func_name)
5249
return func
@@ -102,7 +99,7 @@ def compare(self, obj, version1, version2):
10299
)
103100
if isinstance(f, models.ForeignKey) and f not in fields:
104101
self.reverse_fields.append(f.rel)
105-
#print(self.reverse_fields)
102+
106103
fields += self.reverse_fields
107104

108105
has_unfollowed_fields = False
@@ -121,8 +118,7 @@ def compare(self, obj, version1, version2):
121118
continue
122119

123120
is_reversed = field in self.reverse_fields
124-
obj_compare = CompareObjects(field, field_name, obj, version1, version2, self.revision_manager, is_reversed)
125-
#obj_compare.debug()
121+
obj_compare = CompareObjects(field, field_name, obj, version1, version2, is_reversed)
126122

127123
is_related = obj_compare.is_related
128124
follow = obj_compare.follow
@@ -171,9 +167,7 @@ def generic_add_remove(self, raw_value1, raw_value2, value1, value2):
171167

172168
def compare_ForeignKey(self, obj_compare):
173169
related1, related2 = obj_compare.get_related()
174-
obj_compare.debug()
175170
value1, value2 = str(related1), str(related2)
176-
# value1, value2 = repr(related1), repr(related2)
177171
return self.generic_add_remove(related1, related2, value1, value2)
178172

179173
def simple_compare_ManyToManyField(self, obj_compare):
@@ -215,15 +209,15 @@ def compare_FileField(self, obj_compare):
215209
return self.generic_add_remove(value1, value2, value1, value2)
216210

217211
def compare_DateTimeField(self, obj_compare):
218-
''' compare all model datetime field in ISO format '''
212+
""" compare all model datetime field in ISO format """
219213
context = {
220214
"date1": obj_compare.value1,
221215
"date2": obj_compare.value2,
222216
}
223217
return render_to_string("reversion-compare/compare_DateTimeField.html", context)
224218

225219
def compare_BooleanField(self, obj_compare):
226-
''' compare booleans as a complete field, rather than as a string '''
220+
""" compare booleans as a complete field, rather than as a string """
227221
context = {
228222
"bool1": obj_compare.value1,
229223
"bool2": obj_compare.value2,

reversion_compare/reversion_api.py

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,30 @@
1-
21
import reversion
3-
if reversion.__version__ > (1,10):
2+
from reversion.models import Revision, Version
3+
4+
if reversion.__version__ > (2, 0):
45
from reversion import revisions as reversion
56
from reversion.revisions import (
67
register, unregister, is_registered,
7-
get_for_object, get_registered_models, get_deleted,
8-
create_revision, set_comment
8+
get_registered_models,
9+
create_revision, set_comment, _get_options
910
)
11+
get_for_object_reference = Version.objects.get_for_object_reference
12+
get_for_object = Version.objects.get_for_object
13+
get_deleted = Version.objects.get_deleted
14+
elif reversion.__version__ > (1, 10):
15+
from reversion import revisions as reversion
16+
from reversion.revisions import (
17+
register, unregister, is_registered,
18+
get_for_object, get_for_object_reference, get_registered_models, get_deleted,
19+
create_revision, set_comment, default_revision_manager
20+
)
21+
_get_options = default_revision_manager.get_adapter
1022
else:
1123
# django-reversion <= 1.9
1224
from reversion import (
1325
register, unregister, is_registered,
14-
get_for_object, get_registered_models, get_deleted,
15-
create_revision, set_comment
26+
get_for_object, get_for_object_reference, get_registered_models, get_deleted,
27+
create_revision, set_comment, default_revision_manager
1628
)
29+
_get_options = default_revision_manager.get_adapter
1730

18-
19-
from reversion.models import Revision, Version, has_int_pk

reversion_compare/views.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,11 @@
22
from django.shortcuts import get_object_or_404
33
from django.views.generic.detail import DetailView
44

5+
from reversion_compare import reversion_api
56
from reversion_compare.forms import SelectDiffForm
67
from reversion_compare.mixins import CompareMixin, CompareMethodsMixin
78

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

5153
def _get_action_list(self, ):
52-
opts = self.model._meta
5354
action_list = [
5455
{
5556
"version": version,
5657
"revision": version.revision,
5758
}
5859
for version
59-
in self._order_version_queryset(self.revision_manager.get_for_object(
60+
in self._order_version_queryset(reversion_api.get_for_object(
6061
self.get_object(),
6162
).select_related("revision__user"))
6263
]
@@ -93,7 +94,7 @@ def get_context_data(self, **kwargs):
9394
version_id1, version_id2 = version_id2, version_id1
9495

9596
obj = self.get_object()
96-
queryset = self.revision_manager.get_for_object(obj)
97+
queryset = reversion_api.get_for_object(obj)
9798
version1 = get_object_or_404(queryset, pk=version_id1)
9899
version2 = get_object_or_404(queryset, pk=version_id2)
99100

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

123-
124124
# Compile the context.
125125
context.update({
126126
"action_list": action_list,

setup.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -210,19 +210,16 @@ def get_authors():
210210
include_package_data=True, # include package data under svn source control
211211
install_requires=[
212212
"Django>=1.8",
213-
"django-reversion>=1.9",
213+
"django-reversion>=1.10.2.2",
214214
],
215215
tests_require=[
216216
"django-tools", # https://github.com/jedie/django-tools/
217217
],
218218
zip_safe=False,
219219
classifiers=[
220-
# "Development Status :: 4 - Beta",
221220
"Development Status :: 5 - Production/Stable",
222221
"Environment :: Web Environment",
223222
"Intended Audience :: Developers",
224-
# "Intended Audience :: Education",
225-
# "Intended Audience :: End Users/Desktop",
226223
"License :: OSI Approved :: GNU General Public License (GPL)",
227224
"Programming Language :: Python",
228225
"Programming Language :: Python :: 2.7",

tests/admin.py

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,6 @@
1212

1313
from __future__ import unicode_literals, print_function
1414

15-
16-
from reversion.models import Revision, Version
17-
from reversion.revisions import RevisionManager
18-
1915
from django.contrib import admin
2016
from reversion_compare.admin import CompareVersionAdmin
2117

@@ -52,10 +48,9 @@ class VariantModelAdmin(CompareVersionAdmin):
5248
admin.site.register(VariantModel, VariantModelAdmin)
5349

5450

55-
custom_revision_manager = RevisionManager("custom")
56-
5751
class CustomModelAdmin(CompareVersionAdmin):
58-
revision_manager = custom_revision_manager
52+
pass
53+
5954
admin.site.register(CustomModel, CustomModelAdmin)
6055

6156
admin.site.register(Identity, CustomModelAdmin)

tests/models.py

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,51 +42,61 @@ def __str__(self):
4242
https://github.com/etianen/django-reversion/wiki/Low-level-API
4343
"""
4444

45+
4546
@python_2_unicode_compatible
4647
class Building(models.Model):
4748
address = models.CharField(max_length=128)
49+
4850
def __str__(self):
4951
return self.address
5052

53+
5154
@python_2_unicode_compatible
5255
class Factory(Building):
5356
name = models.CharField(max_length=128)
57+
5458
def __str__(self):
5559
return self.name
5660

61+
5762
@python_2_unicode_compatible
5863
class Car(models.Model):
5964
name = models.CharField(max_length=128)
6065
manufacturer = models.ForeignKey(Factory, related_name="cars")
6166
supplier = models.ManyToManyField(Factory, related_name="suppliers", blank=True)
67+
6268
def __str__(self):
6369
return "%s from %s supplier(s): %s" % (self.name, self.manufacturer, ", ".join([s.name for s in self.supplier.all()]))
6470

6571

6672
@python_2_unicode_compatible
6773
class Pet(models.Model):
6874
name = models.CharField(max_length=100)
75+
6976
def __str__(self):
7077
return self.name
7178

79+
7280
@python_2_unicode_compatible
7381
class Person(models.Model):
7482
name = models.CharField(max_length=100)
7583
pets = models.ManyToManyField(Pet, blank=True)
7684
# If you work someone, its at a build, but maybe not a factory!
7785
workplace = models.ForeignKey(Building, related_name="workers", null=True)
86+
7887
def __str__(self):
7988
return self.name
8089

90+
8191
@python_2_unicode_compatible
8292
class Identity(models.Model):
8393
id_numer = models.CharField(max_length=100)
8494
person = models.OneToOneField(Person, related_name='_identity')
95+
8596
def __str__(self):
8697
return self.id_numer
8798

8899
reversion_api.register(Person, follow=["pets"])
89-
#reversion_api.register(Pet, follow=["person_set"])
90100
reversion_api.register(Pet)
91101

92102

@@ -140,7 +150,6 @@ class VariantModel(models.Model):
140150
def __str__(self):
141151
return "VariantModel instance pk: %i" % self.pk
142152

143-
#------------------------------------------------------------------------------
144153

145154
class CustomModel(models.Model):
146155
"Model which uses a custom version manager."

0 commit comments

Comments
 (0)