Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 624dc3a

Browse filesBrowse files
JacobCoffeeewdurbinezio-melotti
authored
feat: migration from 2.2 -> 3.2 -> 4.2 (#2520)
* feat: initial 2.2 -> 4.2 migration work * feat: minimum dependency changes required to get a live webserver:port log line * test(minutes): fixed minutes test * test(mailing): fixed mailing test * test(codesamples): fixed codesamples tests * test(downloads): fixed downloads tests note: unsure if "valid" * test(pages): fixed pages tests * test(successstories): fixed successstories tests * test(users): fixed users forms tests * test(events): fixed events tests * test(users): fixed users views tests * chore: hide my shame * chore: apply code review * harmonize docker-compose and ci.yml PG versions to prod * Update base-requirements.txt Co-authored-by: Ezio Melotti <ezio.melotti@gmail.com> * chore: remove migrations, rebase latest * chore: apply code review * feat(db): generate migrations * fix: revert allauth version bump Resolves #2520 (comment) * fix: revert allauth account middlware used in later versions * chore: bump allauth version * Fixup tests that interact with django-allauth ACCOUNT_PREVENT_ENUMERATION ACCOUNT_PREVENT_ENUMERATION was introduced in django-allauth 0.52.0, and interferes with our expectations. This should probably be turned on! But for now disable it by default to keep the changeset minimal. Allauth _used_ to iterate over users to check for email uniquenss but stopped at some point, so we have to create an EmailAdress object for the user in the relevant test-case for duplicate emails * chore: bump django package version --------- Co-authored-by: Ee Durbin <ewdurbin@gmail.com> Co-authored-by: Ezio Melotti <ezio.melotti@gmail.com>
1 parent aefbaa1 commit 624dc3a
Copy full SHA for 624dc3a

File tree

63 files changed

+684
-153
lines changed
Filter options

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Dismiss banner

63 files changed

+684
-153
lines changed

‎.github/workflows/ci.yml

Copy file name to clipboardExpand all lines: .github/workflows/ci.yml
+1-1Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ jobs:
55
runs-on: ubuntu-latest
66
services:
77
postgres:
8-
image: postgres:10.1
8+
image: postgres:15.3
99
env:
1010
POSTGRES_USER: postgres
1111
POSTGRES_PASSWORD: postgres

‎banners/__init__.py

Copy file name to clipboard
-1Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +0,0 @@
1-
default_app_config = 'banners.apps.BannersAppConfig'

‎base-requirements.txt

Copy file name to clipboardExpand all lines: base-requirements.txt
+10-11Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
dj-database-url==0.5.0
2-
django-pipeline==2.0.6
3-
django-sitetree==1.18.0
2+
django-pipeline==3.0.0 # 3.0.0 is first version that supports Django 4.2
3+
django-sitetree==1.18.0 # >=1.17.1 is (?) first version that supports Django 4.2
44
django-apptemplates==1.5
55
django-admin-interface==0.24.2
66
django-translation-aliases==0.1.0
7-
Django==2.2.28
7+
Django==4.2.16
88
docutils==0.12
99
Markdown==3.3.4
1010
cmarkgfm==0.6.0
@@ -22,32 +22,31 @@ chardet==4.0.0
2222
celery[redis]==5.3.6
2323
django-celery-beat==2.5.0
2424
# TODO: We may drop 'django-imagekit' completely.
25-
django-imagekit==4.0.2
25+
django-imagekit==5.0 # 5.0 is first version that supports Django 4.2
2626
django-haystack==3.2.1
2727
elasticsearch>=7,<8
2828
# TODO: 0.14.0 only supports Django 1.8 and 1.11.
29-
django-tastypie==0.14.3
29+
django-tastypie==0.14.6 # 0.14.6 is first version that supports Django 4.2
3030

3131
pytz==2021.1
3232
python-dateutil==2.8.2
3333

3434
requests[security]>=2.26.0
3535

36-
django-honeypot==1.0.1
37-
django-markupfield==2.0.0
38-
django-markupfield-helpers==0.1.1
36+
django-honeypot==1.0.4 # 1.0.4 is first version that supports Django 4.2
37+
django-markupfield==2.0.1
3938

40-
django-allauth==0.50.0
39+
django-allauth==0.57.2 # 0.55.0 is first version that supports Django 4.2
4140

4241
django-waffle==2.2.1
4342

44-
djangorestframework==3.12.2
43+
djangorestframework==3.14.0 # 3.14.0 is first version that supports Django 4.1, 4.2 support hasnt been "released"
4544
django-filter==2.4.0
4645
django-ordered-model==3.4.3
4746
django-widget-tweaks==1.4.8
4847
django-countries==7.2.1
4948
num2words==0.5.10
50-
django-polymorphic==3.0.0
49+
django-polymorphic==3.1.0 # 3.1.0 is first version that supports Django 4.0, unsure if it fully supports 4.2
5150
sorl-thumbnail==12.7.0
5251
django-extensions==3.1.4
5352
django-import-export==2.7.1

‎blogs/__init__.py

Copy file name to clipboard
-1Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +0,0 @@
1-
default_app_config = 'blogs.apps.BlogsAppConfig'

‎blogs/admin.py

Copy file name to clipboardExpand all lines: blogs/admin.py
+3-1Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,13 @@ class BlogEntryAdmin(admin.ModelAdmin):
1010
date_hierarchy = 'pub_date'
1111
actions = ['sync_new_entries']
1212

13+
@admin.action(
14+
description="Sync new blog entries"
15+
)
1316
def sync_new_entries(self, request, queryset):
1417
call_command('update_blogs')
1518
self.message_user(request, "Blog entries updated.")
1619

17-
sync_new_entries.short_description = "Sync new blog entries"
1820

1921

2022
@admin.register(FeedAggregate)
+26Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# Generated by Django 4.2.11 on 2024-09-05 17:10
2+
3+
from django.conf import settings
4+
from django.db import migrations, models
5+
import django.db.models.deletion
6+
7+
8+
class Migration(migrations.Migration):
9+
10+
dependencies = [
11+
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
12+
('blogs', '0002_remove_translations_and_contributors'),
13+
]
14+
15+
operations = [
16+
migrations.AlterField(
17+
model_name='relatedblog',
18+
name='creator',
19+
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(app_label)s_%(class)s_creator', to=settings.AUTH_USER_MODEL),
20+
),
21+
migrations.AlterField(
22+
model_name='relatedblog',
23+
name='last_modified_by',
24+
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(app_label)s_%(class)s_modified', to=settings.AUTH_USER_MODEL),
25+
),
26+
]

‎blogs/parser.py

Copy file name to clipboardExpand all lines: blogs/parser.py
+2-2Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
from django.conf import settings
55
from django.template.loader import render_to_string
6-
from django.utils.timezone import make_aware, utc
6+
from django.utils.timezone import make_aware
77

88
from boxes.models import Box
99
from .models import BlogEntry, Feed
@@ -16,7 +16,7 @@ def get_all_entries(feed_url):
1616

1717
for e in d['entries']:
1818
published = make_aware(
19-
datetime.datetime(*e['published_parsed'][:7]), timezone=utc
19+
datetime.datetime(*e['published_parsed'][:7]), timezone=datetime.timezone.utc
2020
)
2121

2222
entry = {

‎boxes/__init__.py

Copy file name to clipboard
-1Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +0,0 @@
1-
default_app_config = 'boxes.apps.BoxesAppConfig'
+26Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# Generated by Django 4.2.11 on 2024-09-05 17:10
2+
3+
from django.conf import settings
4+
from django.db import migrations, models
5+
import django.db.models.deletion
6+
7+
8+
class Migration(migrations.Migration):
9+
10+
dependencies = [
11+
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
12+
('boxes', '0003_auto_20171101_2138'),
13+
]
14+
15+
operations = [
16+
migrations.AlterField(
17+
model_name='box',
18+
name='creator',
19+
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(app_label)s_%(class)s_creator', to=settings.AUTH_USER_MODEL),
20+
),
21+
migrations.AlterField(
22+
model_name='box',
23+
name='last_modified_by',
24+
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(app_label)s_%(class)s_modified', to=settings.AUTH_USER_MODEL),
25+
),
26+
]

‎cms/__init__.py

Copy file name to clipboard
-1Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +0,0 @@
1-
default_app_config = 'cms.apps.CmsAppConfig'

‎codesamples/__init__.py

Copy file name to clipboard
-1Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +0,0 @@
1-
default_app_config = 'codesamples.apps.CodesamplesAppConfig'
+26Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# Generated by Django 4.2.11 on 2024-09-05 17:10
2+
3+
from django.conf import settings
4+
from django.db import migrations, models
5+
import django.db.models.deletion
6+
7+
8+
class Migration(migrations.Migration):
9+
10+
dependencies = [
11+
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
12+
('codesamples', '0003_auto_20170821_2000'),
13+
]
14+
15+
operations = [
16+
migrations.AlterField(
17+
model_name='codesample',
18+
name='creator',
19+
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(app_label)s_%(class)s_creator', to=settings.AUTH_USER_MODEL),
20+
),
21+
migrations.AlterField(
22+
model_name='codesample',
23+
name='last_modified_by',
24+
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(app_label)s_%(class)s_modified', to=settings.AUTH_USER_MODEL),
25+
),
26+
]

‎codesamples/tests.py

Copy file name to clipboardExpand all lines: codesamples/tests.py
+2-4Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,7 @@ def setUp(self):
1616
is_published=False)
1717

1818
def test_published(self):
19-
self.assertQuerysetEqual(CodeSample.objects.published(),
20-
['<CodeSample: Copy One>'])
19+
self.assertQuerySetEqual(CodeSample.objects.published(),['<CodeSample: Copy One>'], transform=repr)
2120

2221
def test_draft(self):
23-
self.assertQuerysetEqual(CodeSample.objects.draft(),
24-
['<CodeSample: Copy Two>'])
22+
self.assertQuerySetEqual(CodeSample.objects.draft(),['<CodeSample: Copy Two>'], transform=repr)

‎community/__init__.py

Copy file name to clipboard
-1Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +0,0 @@
1-
default_app_config = 'community.apps.CommunityAppConfig'
+76Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
# Generated by Django 4.2.11 on 2024-09-05 17:10
2+
3+
from django.conf import settings
4+
from django.db import migrations, models
5+
import django.db.models.deletion
6+
7+
8+
class Migration(migrations.Migration):
9+
10+
dependencies = [
11+
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
12+
('community', '0001_squashed_0004_auto_20170831_0541'),
13+
]
14+
15+
operations = [
16+
migrations.AlterField(
17+
model_name='link',
18+
name='creator',
19+
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(app_label)s_%(class)s_creator', to=settings.AUTH_USER_MODEL),
20+
),
21+
migrations.AlterField(
22+
model_name='link',
23+
name='last_modified_by',
24+
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(app_label)s_%(class)s_modified', to=settings.AUTH_USER_MODEL),
25+
),
26+
migrations.AlterField(
27+
model_name='link',
28+
name='post',
29+
field=models.ForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='related_%(class)s', to='community.post'),
30+
),
31+
migrations.AlterField(
32+
model_name='photo',
33+
name='creator',
34+
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(app_label)s_%(class)s_creator', to=settings.AUTH_USER_MODEL),
35+
),
36+
migrations.AlterField(
37+
model_name='photo',
38+
name='last_modified_by',
39+
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(app_label)s_%(class)s_modified', to=settings.AUTH_USER_MODEL),
40+
),
41+
migrations.AlterField(
42+
model_name='photo',
43+
name='post',
44+
field=models.ForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='related_%(class)s', to='community.post'),
45+
),
46+
migrations.AlterField(
47+
model_name='post',
48+
name='creator',
49+
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(app_label)s_%(class)s_creator', to=settings.AUTH_USER_MODEL),
50+
),
51+
migrations.AlterField(
52+
model_name='post',
53+
name='last_modified_by',
54+
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(app_label)s_%(class)s_modified', to=settings.AUTH_USER_MODEL),
55+
),
56+
migrations.AlterField(
57+
model_name='post',
58+
name='meta',
59+
field=models.JSONField(blank=True, default=dict),
60+
),
61+
migrations.AlterField(
62+
model_name='video',
63+
name='creator',
64+
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(app_label)s_%(class)s_creator', to=settings.AUTH_USER_MODEL),
65+
),
66+
migrations.AlterField(
67+
model_name='video',
68+
name='last_modified_by',
69+
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(app_label)s_%(class)s_modified', to=settings.AUTH_USER_MODEL),
70+
),
71+
migrations.AlterField(
72+
model_name='video',
73+
name='post',
74+
field=models.ForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='related_%(class)s', to='community.post'),
75+
),
76+
]

‎community/models.py

Copy file name to clipboardExpand all lines: community/models.py
+1-1Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from django.contrib.postgres.fields import JSONField
1+
from django.db.models import JSONField
22
from django.urls import reverse
33
from django.db import models
44
from django.utils.translation import gettext_lazy as _

‎community/tests/test_managers.py

Copy file name to clipboardExpand all lines: community/tests/test_managers.py
+3-3Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,6 @@ def test_post_manager(self):
1616
status=Post.STATUS_PUBLIC
1717
)
1818

19-
self.assertQuerysetEqual(Post.objects.all(), [public_post, private_post], lambda x: x)
20-
self.assertQuerysetEqual(Post.objects.public(), [public_post], lambda x: x)
21-
self.assertQuerysetEqual(Post.objects.private(), [private_post], lambda x: x)
19+
self.assertQuerySetEqual(Post.objects.all(), [public_post, private_post], lambda x: x)
20+
self.assertQuerySetEqual(Post.objects.public(), [public_post], lambda x: x)
21+
self.assertQuerySetEqual(Post.objects.private(), [private_post], lambda x: x)

‎companies/__init__.py

Copy file name to clipboard
-1Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +0,0 @@
1-
default_app_config = 'companies.apps.CompaniesAppConfig'

‎docker-compose.yml

Copy file name to clipboardExpand all lines: docker-compose.yml
+1-1Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ version: "3.9"
22

33
services:
44
postgres:
5-
image: postgres:10-bullseye
5+
image: postgres:15.3-bullseye
66
ports:
77
- "5433:5432"
88
environment:

‎downloads/__init__.py

Copy file name to clipboard
-1Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +0,0 @@
1-
default_app_config = 'downloads.apps.DownloadsAppConfig'
+46Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
# Generated by Django 4.2.11 on 2024-09-05 17:10
2+
3+
from django.conf import settings
4+
from django.db import migrations, models
5+
import django.db.models.deletion
6+
7+
8+
class Migration(migrations.Migration):
9+
10+
dependencies = [
11+
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
12+
('downloads', '0010_releasefile_sbom_spdx2_file'),
13+
]
14+
15+
operations = [
16+
migrations.AlterField(
17+
model_name='os',
18+
name='creator',
19+
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(app_label)s_%(class)s_creator', to=settings.AUTH_USER_MODEL),
20+
),
21+
migrations.AlterField(
22+
model_name='os',
23+
name='last_modified_by',
24+
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(app_label)s_%(class)s_modified', to=settings.AUTH_USER_MODEL),
25+
),
26+
migrations.AlterField(
27+
model_name='release',
28+
name='creator',
29+
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(app_label)s_%(class)s_creator', to=settings.AUTH_USER_MODEL),
30+
),
31+
migrations.AlterField(
32+
model_name='release',
33+
name='last_modified_by',
34+
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(app_label)s_%(class)s_modified', to=settings.AUTH_USER_MODEL),
35+
),
36+
migrations.AlterField(
37+
model_name='releasefile',
38+
name='creator',
39+
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(app_label)s_%(class)s_creator', to=settings.AUTH_USER_MODEL),
40+
),
41+
migrations.AlterField(
42+
model_name='releasefile',
43+
name='last_modified_by',
44+
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(app_label)s_%(class)s_modified', to=settings.AUTH_USER_MODEL),
45+
),
46+
]

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.