Skip to content

Commit 07f9ccb

Browse files
authored
feat: add support for Django 5.0 and 5.1 (#429)
* Replace `setup.py test` in github actions * fix: added `exclude_parameters` to `ChangeList.get_queryset` * Delay test since tested fix has not been ported back to django-cms 4.1.3 * Update tests for django 5.0, 5.1 * Update test.yml for all database setups * Update to postgres 13 for django 5.x tests * Update Changelog * Update page content factory to deliver valid x frame options * fix: Close sideframe when clicking preview button * Fix: `FuzzyInteger`'s higher limit is inclusive it turns out
1 parent 85b0182 commit 07f9ccb

File tree

11 files changed

+61
-23
lines changed

11 files changed

+61
-23
lines changed

.github/workflows/test.yml

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,15 @@ jobs:
1515
python-version: [ 3.9, "3.10", "3.11", "3.12" ] # latest release minus two
1616
requirements-file: [
1717
dj32_cms41.txt,
18-
dj40_cms41.txt,
19-
dj41_cms41.txt,
2018
dj42_cms41.txt,
19+
dj50_cms41.txt,
20+
dj51_cms41.txt,
2121
]
22+
exclude:
23+
- requirements-file: dj50_cms41.txt
24+
python-version: 3.9
25+
- requirements-file: dj51_cms41.txt
26+
python-version: 3.9
2227

2328
steps:
2429
- uses: actions/checkout@v4
@@ -47,14 +52,19 @@ jobs:
4752
python-version: [ 3.9, "3.10", "3.11", "3.12" ] # latest release minus two
4853
requirements-file: [
4954
dj32_cms41.txt,
50-
dj40_cms41.txt,
51-
dj41_cms41.txt,
5255
dj42_cms41.txt,
56+
dj50_cms41.txt,
57+
dj51_cms41.txt,
5358
]
59+
exclude:
60+
- requirements-file: dj50_cms41.txt
61+
python-version: 3.9
62+
- requirements-file: dj51_cms41.txt
63+
python-version: 3.9
5464

5565
services:
5666
postgres:
57-
image: postgres:12
67+
image: postgres:13
5868
env:
5969
POSTGRES_USER: postgres
6070
POSTGRES_PASSWORD: postgres
@@ -93,10 +103,15 @@ jobs:
93103
python-version: [ 3.9, "3.10", "3.11", "3.12" ] # latest release minus two
94104
requirements-file: [
95105
dj32_cms41.txt,
96-
dj40_cms41.txt,
97-
dj41_cms41.txt,
98106
dj42_cms41.txt,
107+
dj50_cms41.txt,
108+
dj51_cms41.txt,
99109
]
110+
exclude:
111+
- requirements-file: dj50_cms41.txt
112+
python-version: 3.9
113+
- requirements-file: dj51_cms41.txt
114+
python-version: 3.9
100115

101116
services:
102117
mysql:
@@ -135,7 +150,7 @@ jobs:
135150
fail-fast: false
136151
matrix:
137152
python-version: ['3.11']
138-
requirements-file: ['dj42_cms41.txt']
153+
requirements-file: ['dj51_cms41.txt']
139154
cms-version: [
140155
'https://github.com/django-cms/django-cms/archive/develop-4.tar.gz'
141156
]

CHANGELOG.rst

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,22 @@ Changelog
55
2.1.0 (2024-07-12)
66
==================
77

8+
* feat: add support for Django 5.0 and 5.1 (#429) by @fsbraun in https://github.com/django-cms/djangocms-versioning/pull/429
89
* feat: Add versioning actions to settings (admin change view) of versioned objects by @fsbraun in https://github.com/django-cms/djangocms-versioning/pull/408
910
* fix: Remove workaround for page-specific rendering by @fsbraun in https://github.com/django-cms/djangocms-versioning/pull/411
1011
* fix: Compare versions' back button sometimes returns to invalid URL by @fsbraun in https://github.com/django-cms/djangocms-versioning/pull/413
1112

1213

14+
* feat: Add versioning actions to settings (admin change view) of versioned objects by @fsbraun in https://github.com/django-cms/djangocms-versioning/pull/408
15+
* feat: Optimize db evaluation by @fsbraun in https://github.com/django-cms/djangocms-versioning/pull/416
16+
* feat: Prefetch page content version objects for faster page tree by @fsbraun in https://github.com/django-cms/djangocms-versioning/pull/418
17+
* fix: Remove workaround for page-specific rendering by @fsbraun in https://github.com/django-cms/djangocms-versioning/pull/411
18+
* fix: Compare versions' back button sometimes returns to invalid URL by @fsbraun in https://github.com/django-cms/djangocms-versioning/pull/413
19+
* fix: Preparation for changes in django CMS 4.2 by @jrief in https://github.com/django-cms/djangocms-versioning/pull/419
20+
* fix: Unnecessary complexity in ``current_content`` query set by @fsbraun in https://github.com/django-cms/djangocms-versioning/pull/417
21+
* fix: get_page_content retrieved non page-content objects from the toolbar by @fsbraun in https://github.com/django-cms/djangocms-versioning/pull/423
22+
23+
1324
**Full Changelog**: https://github.com/django-cms/djangocms-versioning/compare/2.0.2...2.1.0
1425

1526
2.0.2 (2024-05-03)

djangocms_versioning/admin.py

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -61,9 +61,14 @@
6161
class VersioningChangeListMixin:
6262
"""Mixin used for ChangeList classes of content models."""
6363

64-
def get_queryset(self, request):
64+
def get_queryset(self, request, exclude_parameters=None):
6565
"""Limit the content model queryset to the latest versions only."""
66-
queryset = super().get_queryset(request)
66+
if exclude_parameters:
67+
# Django 5.0+ (facet support)
68+
queryset = super().get_queryset(request, exclude_parameters)
69+
else:
70+
# Django 4.2 compatible get_queryset
71+
queryset = super().get_queryset(request)
6772
versionable = versionables.for_content(queryset.model)
6873

6974
"""Check if there is a method "self.get_<field>_from_request" for each extra grouping field.
@@ -557,7 +562,7 @@ def get_grouping_field_filters(self, request):
557562
if value is not None:
558563
yield field, value
559564

560-
def get_queryset(self, request):
565+
def get_queryset(self, request, exclude_parameters=None):
561566
"""Adds support for querying the version model by grouping fields.
562567
563568
Filters by the value of grouping fields (specified in VersionableItem
@@ -567,7 +572,12 @@ def get_queryset(self, request):
567572
for specifying filters that work without being shown in the UI
568573
along with filter choices.
569574
"""
570-
queryset = super().get_queryset(request)
575+
if exclude_parameters:
576+
# Django 5.0+ (facet support)
577+
queryset = super().get_queryset(request, exclude_parameters)
578+
else:
579+
# Django 4.2 compatible get_queryset
580+
queryset = super().get_queryset(request)
571581
content_model = self.model_admin.model._source_model
572582
versionable = versionables.for_content(content_model)
573583
filters = dict(self.get_grouping_field_filters(request))

djangocms_versioning/templates/admin/djangocms_versioning/page/change_form.html

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,9 @@
1919
{% include "admin/djangocms_versioning/versioning_buttons.html" %}
2020
<li>
2121
{% get_preview_url original as admin_url %}
22-
<a href="{{ admin_url }}" target="_parent">{% trans "Preview" %}</a>
22+
<a href="{{ admin_url }}" onclick="window.parent.CMS.API.Sideframe.close()" target="_parent">
23+
{% trans "Preview" %}
24+
</a>
2325
</li>
2426
{% endblock %}
2527
</ul>

djangocms_versioning/test_utils/factories.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,7 @@ class PageContentFactory(AbstractContentFactory):
226226
soft_root = FuzzyChoice([True, False])
227227
limit_visibility_in_menu = constants.VISIBILITY_USERS
228228
template = "page.html"
229-
xframe_options = FuzzyInteger(0, 25)
229+
xframe_options = FuzzyInteger(0, 3)
230230

231231
class Meta:
232232
model = PageContent

tests/requirements/dj32_cms41.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,5 @@ django-cms>=4.1,<4.2
44

55
Django>=3.2,<4.0
66
django-classy-tags
7-
django-fsm>=2.6
7+
django-fsm>=2.6,<3
88
django-sekizai

tests/requirements/dj42_cms41.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,5 @@ django-cms>=4.1,<4.2
44

55
Django>=4.2,<5
66
django-classy-tags
7-
django-fsm>=2.6
7+
django-fsm>=2.6,<3
88
django-sekizai

tests/requirements/dj40_cms41.txt renamed to tests/requirements/dj50_cms41.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
django-cms>=4.1,<4.2
44

5-
Django>=4.0,<4.1
5+
Django>=5.0,<5.1
66
django-classy-tags
7-
django-fsm>=2.6
7+
django-fsm>=2.6,<3
88
django-sekizai

tests/requirements/dj41_cms41.txt renamed to tests/requirements/dj51_cms41.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
django-cms>=4.1,<4.2
44

5-
Django>=4.1,<4.2
5+
Django>=5.1,<5.2
66
django-classy-tags
7-
django-fsm>=2.6
7+
django-fsm>=2.6,<3
88
django-sekizai

tests/test_cms_config.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ def test_changing_slug_changes_page_url(self):
119119
form = ChangePageForm(data, instance=self.content)
120120
form._request = request
121121
form._site = self.site
122-
self.assertEqual(form.is_valid(), True)
122+
self.assertTrue(form.is_valid(), f"Form errors: {form.errors}")
123123

124124
form.save()
125125
page = Page.objects.get(pk=self.page.pk)

0 commit comments

Comments
 (0)