Skip to content

Commit 9e84314

Browse files
author
Ross Mechanic
committed
Removed support for Django 1.9
1 parent f0ab3b6 commit 9e84314

File tree

10 files changed

+29
-32
lines changed

10 files changed

+29
-32
lines changed

CHANGES.rst

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ Changes
33

44
Unreleased
55
----------
6-
- Fix bug where history_view ignored user permissions
7-
- Dropped support for Django<=1.8
6+
- Dropped support for Django<=1.9 (gh-356)
7+
- Fix bug where history_view ignored user permissions (gh-361)
88

99
1.9.1 (2018-03-30)
1010
------------------

README.rst

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,9 @@ django-simple-history
2020

2121
django-simple-history stores Django model state on every create/update/delete.
2222

23-
This app requires Django 1.9 or greater and Python 2.7, or 3.4 or greater.
23+
This app requires Django 1.10 and 1.11 and Python 2.7, or 3.4 or greater.
24+
However, the most recent release (1.9.1) supports Django>=1.7,<2.0. The next
25+
release will include Django 2.0 support.
2426

2527
Getting Help
2628
------------

setup.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import simple_history
33

44
tests_require = [
5-
'Django>=1.9', 'WebTest==2.0.24', 'django-webtest==1.8.0', 'mock==1.0.1']
5+
'Django>=1.10', 'WebTest==2.0.24', 'django-webtest==1.8.0', 'mock==1.0.1']
66

77
setup(
88
name='django-simple-history',
@@ -25,7 +25,6 @@
2525
"Environment :: Web Environment",
2626
"Intended Audience :: Developers",
2727
"Framework :: Django",
28-
"Framework :: Django :: 1.9",
2928
"Framework :: Django :: 1.10",
3029
"Framework :: Django :: 1.11",
3130
"Programming Language :: Python",

simple_history/middleware.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
1-
from . models import HistoricalRecords
1+
from django.utils.deprecation import MiddlewareMixin as MiddlewareBase
22

3-
try:
4-
from django.utils.deprecation import MiddlewareMixin as MiddlewareBase
5-
except ImportError: # Django < 1.10
6-
MiddlewareBase = object
3+
from .models import HistoricalRecords
74

85

96
class HistoryRequestMiddleware(MiddlewareBase):

simple_history/models.py

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525
add_introspection_rules(
2626
[], ["^simple_history.models.CustomForeignKeyField"])
2727

28-
2928
registered_models = {}
3029

3130

@@ -69,6 +68,7 @@ def save_without_historical_record(self, *args, **kwargs):
6968
finally:
7069
del self.skip_history_when_saving
7170
return ret
71+
7272
setattr(cls, 'save_without_historical_record',
7373
save_without_historical_record)
7474

@@ -156,18 +156,15 @@ def copy_fields(self, model):
156156
fields = {}
157157
for field in self.fields_included(model):
158158
field = copy.copy(field)
159-
try:
160-
field.remote_field = copy.copy(field.remote_field)
161-
except AttributeError:
162-
field.rel = copy.copy(field.rel)
159+
field.remote_field = copy.copy(field.remote_field)
163160
if isinstance(field, OrderWrt):
164161
# OrderWrt is a proxy field, switch to a plain IntegerField
165162
field.__class__ = models.IntegerField
166163
if isinstance(field, models.ForeignKey):
167164
old_field = field
168165
field_arguments = {'db_constraint': False}
169166
if (getattr(old_field, 'one_to_one', False) or
170-
isinstance(old_field, models.OneToOneField)):
167+
isinstance(old_field, models.OneToOneField)):
171168
FieldType = models.ForeignKey
172169
else:
173170
FieldType = type(old_field)
@@ -176,13 +173,15 @@ def copy_fields(self, model):
176173
if getattr(old_field, 'db_column', None):
177174
field_arguments['db_column'] = old_field.db_column
178175

179-
# If old_field.rel.to is 'self' then we have a case where object has a foreign key
180-
# to itself. In this case we update need to set the `to` value of the field
181-
# to be set to a model. We can use the old_field.model value.
182-
if isinstance(old_field.rel.to, str) and old_field.rel.to == 'self':
176+
# If old_field.remote_field.model is 'self' then we have a
177+
# case where object has a foreign key to itself. In this case
178+
# we need to set the `model` value of the field to a model. We
179+
# can use the old_field.model value.
180+
if isinstance(old_field.remote_field.model, str) and \
181+
old_field.remote_field.model == 'self':
183182
object_to = old_field.model
184183
else:
185-
object_to = old_field.rel.to
184+
object_to = old_field.remote_field.model
186185

187186
field = FieldType(
188187
object_to,

simple_history/registry_tests/migration_test_app/models.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,5 @@ class WhatIMean(DoYouKnow):
1111

1212

1313
class Yar(models.Model):
14-
what = models.ForeignKey(WhatIMean)
14+
what = models.ForeignKey(WhatIMean, on_delete=models.CASCADE)
1515
history = HistoricalRecords()

simple_history/tests/models.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,7 @@ class Meta:
255255

256256

257257
class PollInfo(models.Model):
258-
poll = models.ForeignKey(
258+
poll = models.OneToOneField(
259259
Poll,
260260
on_delete=models.CASCADE,
261261
primary_key=True,
@@ -272,7 +272,8 @@ class UserAccessorOverride(models.Model):
272272

273273

274274
class Employee(models.Model):
275-
manager = models.OneToOneField('Employee', null=True)
275+
manager = models.OneToOneField('Employee', null=True,
276+
on_delete=models.CASCADE)
276277
history = HistoricalRecords()
277278

278279

simple_history/tests/tests/test_models.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,7 @@ def test_foreignkey_still_allows_reverse_lookup_via_set_attribute(self):
184184
lib = Library.objects.create()
185185
state = State.objects.create(library=lib)
186186
self.assertTrue(hasattr(lib, 'state_set'))
187-
self.assertIsNone(state._meta.get_field('library').rel.related_name,
187+
self.assertIsNone(state._meta.get_field('library').remote_field.related_name,
188188
"the '+' shouldn't leak through to the original "
189189
"model's field related_name")
190190

@@ -519,12 +519,12 @@ def test_invalid_bases(self):
519519

520520
def test_import_related(self):
521521
field_object = HistoricalChoice._meta.get_field('poll')
522-
related_model = field_object.rel.related_model
522+
related_model = field_object.remote_field.related_model
523523
self.assertEqual(related_model, HistoricalChoice)
524524

525525
def test_string_related(self):
526526
field_object = HistoricalState._meta.get_field('library')
527-
related_model = field_object.rel.related_model
527+
related_model = field_object.remote_field.related_model
528528
self.assertEqual(related_model, HistoricalState)
529529

530530
def test_state_serialization_of_customfk(self):

simple_history/tests/urls.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
from __future__ import unicode_literals
22

3-
from django.conf.urls import include, url
3+
from django.conf.urls import url
44
from django.contrib import admin
5+
56
from . import other_admin
67

78
admin.autodiscover()
89

910
urlpatterns = [
10-
url(r'^admin/', include(admin.site.urls)),
11-
url(r'^other-admin/', include(other_admin.site.urls)),
11+
url(r'^admin/', admin.site.urls),
12+
url(r'^other-admin/', other_admin.site.urls),
1213
]

tox.ini

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
[tox]
22
envlist =
3-
py{27,34,35}-django19,
43
py{27,34,35,36}-django110,
54
py{27,34,35,36}-django111,
65
py{35,36}-djangotrunk,
@@ -28,7 +27,6 @@ commands = sphinx-build -W -b html -d {envtmpdir}/doctrees . {envtmpdir}/html
2827
[testenv]
2928
deps =
3029
coverage
31-
django19: Django>=1.9,<1.10
3230
django110: Django>=1.10,<1.11
3331
django111: Django>=1.11,<1.12
3432
djangotrunk: https://github.com/django/django/tarball/master

0 commit comments

Comments
 (0)