Skip to content

Commit 63ca0f9

Browse files
authored
Merge pull request #6494 from readthedocs/humitos/django-upgrade-2.2
Upgrade to Django 2.2.9
2 parents 098db3d + 7b23d7a commit 63ca0f9

37 files changed

+85
-63
lines changed

pytest.ini

-4
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,6 @@
22
addopts = --reuse-db
33
python_files = tests.py test_*.py *_tests.py
44
filterwarnings =
5-
# TODO: this filter has to be removed before migrating to Django
6-
# 2.0 and the code has to be upgrade accordingly
7-
ignore::django.utils.deprecation.RemovedInDjango20Warning
8-
95
# Ignore external dependencies warning deprecations
106
# textclassifier
117
ignore:The 'warn' method is deprecated, use 'warning' instead:DeprecationWarning

readthedocs/api/v3/serializers.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
from django.conf import settings
55
from django.contrib.auth.models import User
6-
from django.core.urlresolvers import reverse
6+
from django.urls import reverse
77
from django.utils.translation import ugettext as _
88

99
from rest_flex_fields import FlexFieldsModelSerializer

readthedocs/builds/migrations/0001_initial.py

+4-5
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ class Migration(migrations.Migration):
2929
('commit', models.CharField(max_length=255, null=True, verbose_name='Commit', blank=True)),
3030
('length', models.IntegerField(null=True, verbose_name='Build Length', blank=True)),
3131
('builder', models.CharField(max_length=255, null=True, verbose_name='Builder', blank=True)),
32-
('project', models.ForeignKey(related_name='builds', verbose_name='Project', to='projects.Project')),
32+
('project', models.ForeignKey(related_name='builds', verbose_name='Project', to='projects.Project', on_delete=models.CASCADE)),
3333
],
3434
options={
3535
'ordering': ['-date'],
@@ -50,12 +50,11 @@ class Migration(migrations.Migration):
5050
('uploaded', models.BooleanField(default=False, verbose_name='Uploaded')),
5151
('privacy_level', models.CharField(default=b'public', help_text='Level of privacy for this Version.', max_length=20, verbose_name='Privacy Level', choices=[(b'public', 'Public'), (b'protected', 'Protected'), (b'private', 'Private')])),
5252
('machine', models.BooleanField(default=False, verbose_name='Machine Created')),
53-
('project', models.ForeignKey(related_name='versions', verbose_name='Project', to='projects.Project')),
53+
('project', models.ForeignKey(related_name='versions', verbose_name='Project', to='projects.Project', on_delete=models.CASCADE)),
5454
('tags', taggit.managers.TaggableManager(to='taggit.Tag', through='taggit.TaggedItem', blank=True, help_text='A comma-separated list of tags.', verbose_name='Tags')),
5555
],
5656
options={
5757
'ordering': ['-verbose_name'],
58-
'permissions': (('view_version', 'View Version'),),
5958
},
6059
),
6160
migrations.CreateModel(
@@ -65,13 +64,13 @@ class Migration(migrations.Migration):
6564
('from_slug', models.CharField(default=b'', max_length=255, verbose_name='From slug')),
6665
('to_slug', models.CharField(default=b'', max_length=255, verbose_name='To slug', blank=True)),
6766
('largest', models.BooleanField(default=False, verbose_name='Largest')),
68-
('project', models.ForeignKey(related_name='aliases', verbose_name='Project', to='projects.Project')),
67+
('project', models.ForeignKey(related_name='aliases', verbose_name='Project', to='projects.Project', on_delete=models.CASCADE)),
6968
],
7069
),
7170
migrations.AddField(
7271
model_name='build',
7372
name='version',
74-
field=models.ForeignKey(related_name='builds', verbose_name='Version', to='builds.Version', null=True),
73+
field=models.ForeignKey(related_name='builds', verbose_name='Version', to='builds.Version', null=True, on_delete=models.CASCADE),
7574
),
7675
migrations.AlterUniqueTogether(
7776
name='version',

readthedocs/builds/migrations/0002_build_command_initial.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ class Migration(migrations.Migration):
2121
('exit_code', models.IntegerField(verbose_name='Command exit code')),
2222
('start_time', models.DateTimeField(verbose_name='Start time')),
2323
('end_time', models.DateTimeField(verbose_name='End time')),
24-
('build', models.ForeignKey(related_name='commands', verbose_name='Build', to='builds.Build')),
24+
('build', models.ForeignKey(related_name='commands', verbose_name='Build', to='builds.Build', on_delete=models.CASCADE)),
2525
],
2626
options={
2727
'ordering': ['start_time'],

readthedocs/builds/models.py

+4-5
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ class Version(models.Model):
9292
Project,
9393
verbose_name=_('Project'),
9494
related_name='versions',
95+
on_delete=models.CASCADE,
9596
)
9697
type = models.CharField(
9798
_('Type'),
@@ -160,11 +161,6 @@ class Version(models.Model):
160161
class Meta:
161162
unique_together = [('project', 'slug')]
162163
ordering = ['-verbose_name']
163-
permissions = (
164-
# Translators: Permission around whether a user can view the
165-
# version
166-
('view_version', _('View Version')),
167-
)
168164

169165
def __str__(self):
170166
return ugettext(
@@ -629,12 +625,14 @@ class Build(models.Model):
629625
Project,
630626
verbose_name=_('Project'),
631627
related_name='builds',
628+
on_delete=models.CASCADE,
632629
)
633630
version = models.ForeignKey(
634631
Version,
635632
verbose_name=_('Version'),
636633
null=True,
637634
related_name='builds',
635+
on_delete=models.CASCADE,
638636
)
639637
type = models.CharField(
640638
_('Type'),
@@ -924,6 +922,7 @@ class BuildCommandResult(BuildCommandResultMixin, models.Model):
924922
Build,
925923
verbose_name=_('Build'),
926924
related_name='commands',
925+
on_delete=models.CASCADE,
927926
)
928927

929928
command = models.TextField(_('Command'))

readthedocs/builds/views.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -87,8 +87,8 @@ def _get_versions(self, project):
8787

8888
class BuildList(BuildBase, BuildTriggerMixin, ListView):
8989

90-
def get_context_data(self, **kwargs):
91-
context = super().get_context_data(**kwargs)
90+
def get_context_data(self, *, object_list=None, **kwargs):
91+
context = super().get_context_data(object_list=object_list, **kwargs)
9292

9393
active_builds = self.get_queryset().exclude(
9494
state='finished',

readthedocs/core/migrations/0001_initial.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ class Migration(migrations.Migration):
1717
('whitelisted', models.BooleanField(default=False, verbose_name='Whitelisted')),
1818
('homepage', models.CharField(max_length=100, verbose_name='Homepage', blank=True)),
1919
('allow_email', models.BooleanField(default=True, help_text='Show your email on VCS contributions.', verbose_name='Allow email')),
20-
('user', models.ForeignKey(related_name='profile', verbose_name='User', to=settings.AUTH_USER_MODEL, unique=True)),
20+
('user', models.ForeignKey(related_name='profile', verbose_name='User', to=settings.AUTH_USER_MODEL, unique=True, on_delete=models.CASCADE)),
2121
],
2222
),
2323
]

readthedocs/core/migrations/0002_make_userprofile_user_a_onetoonefield.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,6 @@ class Migration(migrations.Migration):
1313
migrations.AlterField(
1414
model_name='userprofile',
1515
name='user',
16-
field=models.OneToOneField(related_name='profile', verbose_name='User', to=settings.AUTH_USER_MODEL),
16+
field=models.OneToOneField(related_name='profile', verbose_name='User', to=settings.AUTH_USER_MODEL, on_delete=models.CASCADE),
1717
),
1818
]

readthedocs/core/models.py

+1
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ class UserProfile(models.Model):
2121
'auth.User',
2222
verbose_name=_('User'),
2323
related_name='profile',
24+
on_delete=models.CASCADE,
2425
)
2526
whitelisted = models.BooleanField(_('Whitelisted'), default=False)
2627
banned = models.BooleanField(_('Banned'), default=False)

readthedocs/gold/migrations/0001_initial.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ class Migration(migrations.Migration):
2222
('stripe_id', models.CharField(max_length=255)),
2323
('subscribed', models.BooleanField(default=False)),
2424
('projects', models.ManyToManyField(related_name='gold_owners', verbose_name='Projects', to='projects.Project')),
25-
('user', models.ForeignKey(related_name='gold', verbose_name='User', to=settings.AUTH_USER_MODEL, unique=True)),
25+
('user', models.ForeignKey(related_name='gold', verbose_name='User', to=settings.AUTH_USER_MODEL, unique=True, on_delete=models.CASCADE)),
2626
],
2727
),
2828
]

readthedocs/gold/models.py

+1
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ class GoldUser(models.Model):
3535
verbose_name=_('User'),
3636
unique=True,
3737
related_name='gold',
38+
on_delete=models.CASCADE,
3839
)
3940
level = models.CharField(
4041
_('Level'),

readthedocs/integrations/models.py

+5-1
Original file line numberDiff line numberDiff line change
@@ -246,7 +246,11 @@ class Integration(models.Model):
246246

247247
INTEGRATIONS = WEBHOOK_INTEGRATIONS
248248

249-
project = models.ForeignKey(Project, related_name='integrations')
249+
project = models.ForeignKey(
250+
Project,
251+
related_name='integrations',
252+
on_delete=models.CASCADE,
253+
)
250254
integration_type = models.CharField(
251255
_('Integration type'),
252256
max_length=32,

readthedocs/oauth/migrations/0001_initial.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -71,14 +71,14 @@ class Migration(migrations.Migration):
7171
('html_url', models.URLField(null=True, verbose_name='HTML URL', blank=True)),
7272
('active', models.BooleanField(default=False, verbose_name='Active')),
7373
('json', models.TextField(verbose_name=b'JSON')),
74-
('organization', models.ForeignKey(related_name='projects', verbose_name='Organization', blank=True, to='oauth.GithubOrganization', null=True)),
74+
('organization', models.ForeignKey(related_name='projects', verbose_name='Organization', blank=True, to='oauth.GithubOrganization', null=True, on_delete=models.CASCADE)),
7575
('users', models.ManyToManyField(related_name='github_projects', verbose_name='Users', to=settings.AUTH_USER_MODEL)),
7676
],
7777
),
7878
migrations.AddField(
7979
model_name='bitbucketproject',
8080
name='organization',
81-
field=models.ForeignKey(related_name='projects', verbose_name='Organization', blank=True, to='oauth.BitbucketTeam', null=True),
81+
field=models.ForeignKey(related_name='projects', verbose_name='Organization', blank=True, to='oauth.BitbucketTeam', null=True, on_delete=models.CASCADE),
8282
),
8383
migrations.AddField(
8484
model_name='bitbucketproject',

readthedocs/oauth/migrations/0002_combine_services.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ class Migration(migrations.Migration):
4848
('vcs', models.CharField(blank=True, max_length=200, verbose_name='vcs', choices=[(b'git', 'Git'), (b'svn', 'Subversion'), (b'hg', 'Mercurial'), (b'bzr', 'Bazaar')])),
4949
('source', models.CharField(max_length=16, verbose_name='Repository source', choices=[(b'github', 'GitHub'), (b'bitbucket', 'Bitbucket')])),
5050
('json', models.TextField(verbose_name='Serialized API response')),
51-
('organization', models.ForeignKey(related_name='repositories', verbose_name='Organization', blank=True, to='oauth.RemoteOrganization', null=True)),
51+
('organization', models.ForeignKey(related_name='repositories', verbose_name='Organization', blank=True, to='oauth.RemoteOrganization', null=True, on_delete=models.CASCADE)),
5252
('users', models.ManyToManyField(related_name='oauth_repositories', verbose_name='Users', to=settings.AUTH_USER_MODEL)),
5353
],
5454
options={

readthedocs/oauth/migrations/0005_add_account_relation.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,11 @@ class Migration(migrations.Migration):
1313
migrations.AddField(
1414
model_name='remoteorganization',
1515
name='account',
16-
field=models.ForeignKey(related_name='remote_organizations', verbose_name='Connected account', blank=True, to='socialaccount.SocialAccount', null=True),
16+
field=models.ForeignKey(related_name='remote_organizations', verbose_name='Connected account', blank=True, to='socialaccount.SocialAccount', null=True, on_delete=models.CASCADE),
1717
),
1818
migrations.AddField(
1919
model_name='remoterepository',
2020
name='account',
21-
field=models.ForeignKey(related_name='remote_repositories', verbose_name='Connected account', blank=True, to='socialaccount.SocialAccount', null=True),
21+
field=models.ForeignKey(related_name='remote_repositories', verbose_name='Connected account', blank=True, to='socialaccount.SocialAccount', null=True, on_delete=models.CASCADE),
2222
),
2323
]

readthedocs/oauth/models.py

+3
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ class RemoteOrganization(models.Model):
4141
related_name='remote_organizations',
4242
null=True,
4343
blank=True,
44+
on_delete=models.CASCADE,
4445
)
4546
active = models.BooleanField(_('Active'), default=False)
4647

@@ -96,13 +97,15 @@ class RemoteRepository(models.Model):
9697
related_name='remote_repositories',
9798
null=True,
9899
blank=True,
100+
on_delete=models.CASCADE,
99101
)
100102
organization = models.ForeignKey(
101103
RemoteOrganization,
102104
verbose_name=_('Organization'),
103105
related_name='repositories',
104106
null=True,
105107
blank=True,
108+
on_delete=models.CASCADE,
106109
)
107110
active = models.BooleanField(_('Active'), default=False)
108111

readthedocs/projects/migrations/0001_initial.py

+5-6
Original file line numberDiff line numberDiff line change
@@ -65,27 +65,26 @@ class Migration(migrations.Migration):
6565
('num_major', models.IntegerField(default=2, blank=True, help_text='2 means supporting 3.X.X and 2.X.X, but not 1.X.X', null=True, verbose_name='Number of Major versions')),
6666
('num_minor', models.IntegerField(default=2, blank=True, help_text='2 means supporting 2.2.X and 2.1.X, but not 2.0.X', null=True, verbose_name='Number of Minor versions')),
6767
('num_point', models.IntegerField(default=2, blank=True, help_text='2 means supporting 2.2.2 and 2.2.1, but not 2.2.0', null=True, verbose_name='Number of Point versions')),
68-
('main_language_project', models.ForeignKey(related_name='translations', blank=True, to='projects.Project', null=True)),
68+
('main_language_project', models.ForeignKey(related_name='translations', blank=True, to='projects.Project', null=True, on_delete=models.CASCADE)),
6969
],
7070
options={
7171
'ordering': ('slug',),
72-
'permissions': (('view_project', 'View Project'),),
7372
},
7473
),
7574
migrations.CreateModel(
7675
name='ProjectRelationship',
7776
fields=[
7877
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
79-
('child', models.ForeignKey(related_name='superprojects', verbose_name='Child', to='projects.Project')),
80-
('parent', models.ForeignKey(related_name='subprojects', verbose_name='Parent', to='projects.Project')),
78+
('child', models.ForeignKey(related_name='superprojects', verbose_name='Child', to='projects.Project', on_delete=models.CASCADE)),
79+
('parent', models.ForeignKey(related_name='subprojects', verbose_name='Parent', to='projects.Project', on_delete=models.CASCADE)),
8180
],
8281
),
8382
migrations.CreateModel(
8483
name='WebHook',
8584
fields=[
8685
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
8786
('url', models.URLField(help_text='URL to send the webhook to', blank=True)),
88-
('project', models.ForeignKey(related_name='webhook_notifications', to='projects.Project')),
87+
('project', models.ForeignKey(related_name='webhook_notifications', to='projects.Project', on_delete=models.CASCADE)),
8988
],
9089
options={
9190
'abstract': False,
@@ -109,6 +108,6 @@ class Migration(migrations.Migration):
109108
migrations.AddField(
110109
model_name='emailhook',
111110
name='project',
112-
field=models.ForeignKey(related_name='emailhook_notifications', to='projects.Project'),
111+
field=models.ForeignKey(related_name='emailhook_notifications', to='projects.Project', on_delete=models.CASCADE),
113112
),
114113
]

readthedocs/projects/migrations/0002_add_importedfile_model.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ class Migration(migrations.Migration):
1919
('path', models.CharField(max_length=255, verbose_name='Path')),
2020
('md5', models.CharField(max_length=255, verbose_name='MD5 checksum')),
2121
('commit', models.CharField(max_length=255, verbose_name='Commit')),
22-
('project', models.ForeignKey(related_name='imported_files', verbose_name='Project', to='projects.Project')),
23-
('version', models.ForeignKey(related_name='imported_files', verbose_name='Version', to='builds.Version', null=True)),
22+
('project', models.ForeignKey(related_name='imported_files', verbose_name='Project', to='projects.Project', on_delete=models.CASCADE)),
23+
('version', models.ForeignKey(related_name='imported_files', verbose_name='Version', to='builds.Version', null=True, on_delete=models.CASCADE)),
2424
],
2525
),
2626
]

readthedocs/projects/migrations/0006_add_domain_models.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ class Migration(migrations.Migration):
1818
('cname', models.BooleanField(default=False, help_text='This URL is a CNAME for the project')),
1919
('canonical', models.BooleanField(default=False, help_text='This URL is the primary one where the documentation is served from.')),
2020
('count', models.IntegerField(default=0, help_text='Number of times this domain has been hit.')),
21-
('project', models.ForeignKey(related_name='domains', to='projects.Project')),
21+
('project', models.ForeignKey(related_name='domains', to='projects.Project', on_delete=models.CASCADE)),
2222
],
2323
options={
2424
'ordering': ('-canonical', '-machine', 'url'),

readthedocs/projects/models.py

+14-7
Original file line numberDiff line numberDiff line change
@@ -67,11 +67,13 @@ class ProjectRelationship(models.Model):
6767
'Project',
6868
verbose_name=_('Parent'),
6969
related_name='subprojects',
70+
on_delete=models.CASCADE,
7071
)
7172
child = models.ForeignKey(
7273
'Project',
7374
verbose_name=_('Child'),
7475
related_name='superprojects',
76+
on_delete=models.CASCADE,
7577
)
7678
alias = models.SlugField(
7779
_('Alias'),
@@ -404,11 +406,6 @@ class Project(models.Model):
404406

405407
class Meta:
406408
ordering = ('slug',)
407-
permissions = (
408-
# Translators: Permission around whether a user can view the
409-
# project
410-
('view_project', _('View Project')),
411-
)
412409

413410
def __str__(self):
414411
return self.name
@@ -1281,12 +1278,14 @@ class ImportedFile(models.Model):
12811278
'Project',
12821279
verbose_name=_('Project'),
12831280
related_name='imported_files',
1281+
on_delete=models.CASCADE,
12841282
)
12851283
version = models.ForeignKey(
12861284
'builds.Version',
12871285
verbose_name=_('Version'),
12881286
related_name='imported_files',
12891287
null=True,
1288+
on_delete=models.CASCADE,
12901289
)
12911290
name = models.CharField(_('Name'), max_length=255)
12921291
slug = models.SlugField(_('Slug'))
@@ -1376,7 +1375,11 @@ def processed_json(self):
13761375

13771376

13781377
class Notification(models.Model):
1379-
project = models.ForeignKey(Project, related_name='%(class)s_notifications')
1378+
project = models.ForeignKey(
1379+
Project,
1380+
related_name='%(class)s_notifications',
1381+
on_delete=models.CASCADE,
1382+
)
13801383
objects = RelatedProjectQuerySet.as_manager()
13811384

13821385
class Meta:
@@ -1405,7 +1408,11 @@ class Domain(models.Model):
14051408

14061409
"""A custom domain name for a project."""
14071410

1408-
project = models.ForeignKey(Project, related_name='domains')
1411+
project = models.ForeignKey(
1412+
Project,
1413+
related_name='domains',
1414+
on_delete=models.CASCADE,
1415+
)
14091416
domain = models.CharField(
14101417
_('Domain'),
14111418
unique=True,

readthedocs/projects/views/private.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -115,8 +115,8 @@ def get(self, request, *args, **kwargs):
115115
self.validate_primary_email(request.user)
116116
return super(ProjectDashboard, self).get(self, request, *args, **kwargs)
117117

118-
def get_context_data(self, **kwargs):
119-
context = super().get_context_data(**kwargs)
118+
def get_context_data(self, *, object_list=None, **kwargs):
119+
context = super().get_context_data(object_list=object_list, **kwargs)
120120

121121
return context
122122

readthedocs/projects/views/public.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,8 @@ def get_queryset(self):
6060

6161
return queryset
6262

63-
def get_context_data(self, **kwargs):
64-
context = super().get_context_data(**kwargs)
63+
def get_context_data(self, *, object_list=None, **kwargs):
64+
context = super().get_context_data(object_list=object_list, **kwargs)
6565
context['tag'] = self.tag
6666
return context
6767

0 commit comments

Comments
 (0)