Skip to content

Commit 0e090e5

Browse files
feat: Django 5.0 support, fixed test suite (#203)
* Update test suite * Update requirements for py3.12 * Fix flake8 issues and tox.ini * Fix coverage command in tox.ini * ci: auto fixes from pre-commit hooks for more information, see https://pre-commit.ci * Fix CategoryFilter test for Django 5.0 --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
1 parent 1d23542 commit 0e090e5

Some content is hidden

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

44 files changed

+1469
-516
lines changed

.github/workflows/test.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ jobs:
1919
- 3.9
2020
- '3.10'
2121
- '3.11'
22+
- '3.12'
2223

2324
steps:
2425
- uses: actions/checkout@v4

djangocms_alias/cms_plugins.py

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -140,24 +140,26 @@ def can_detach(cls, user, target_placeholder, plugins):
140140

141141
@classmethod
142142
def detach_alias_plugin(cls, plugin, language):
143-
source_placeholder = plugin.alias.get_placeholder(language)
143+
source_placeholder = plugin.alias.get_placeholder(language, show_draft_content=True) # We're in edit mode
144144
target_placeholder = plugin.placeholder
145-
source_plugins = plugin.alias.get_plugins(language)
146145

147146
# Deleting uses a copy of a plugin to preserve pk on existing
148147
# ``plugin`` object. This is done due to
149148
# plugin.get_plugin_toolbar_info requiring a PK in a passed
150149
# instance.
151-
source_placeholder.delete_plugin(copy(plugin))
150+
target_placeholder.delete_plugin(copy(plugin))
152151
target_placeholder._shift_plugin_positions(
153152
language,
154153
plugin.position,
155154
offset=target_placeholder.get_last_plugin_position(language),
156155
)
157-
copied_plugins = copy_plugins_to_placeholder(
158-
source_plugins,
159-
placeholder=target_placeholder,
160-
language=language,
161-
start_positions={language: plugin.position},
162-
)
163-
return copied_plugins
156+
if source_placeholder:
157+
source_plugins = source_placeholder.get_plugins_list()
158+
copied_plugins = copy_plugins_to_placeholder(
159+
source_plugins,
160+
placeholder=target_placeholder,
161+
language=language,
162+
start_positions={language: plugin.position},
163+
)
164+
return copied_plugins
165+
return []

setup.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,16 @@
1313
'Topic :: Internet :: WWW/HTTP :: Dynamic Content',
1414
'Topic :: Software Development',
1515
'Topic :: Software Development :: Libraries :: Application Frameworks',
16-
'Programming Language :: Python :: 3.7',
17-
'Programming Language :: Python :: 3.8',
1816
'Programming Language :: Python :: 3.9',
1917
'Programming Language :: Python :: 3.10',
2018
'Programming Language :: Python :: 3.11',
19+
'Programming Language :: Python :: 3.12',
2120
'Framework :: Django',
2221
'Framework :: Django :: 3.2',
2322
'Framework :: Django :: 4.0',
2423
'Framework :: Django :: 4.1',
24+
'Framework :: Django :: 4.2',
25+
'Framework :: Django :: 5.0',
2526
'Framework :: Django CMS :: 4.1',
2627
]
2728

tests/base.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
from django.contrib.auth.models import Permission
33
from django.http import QueryDict
44
from django.test.client import RequestFactory
5-
from django.urls import resolve
65

76
from cms.api import add_plugin, create_page, create_page_content
87
from cms.middleware.toolbar import ToolbarMiddleware
@@ -184,7 +183,6 @@ def _process_request_by_toolbar_middleware(self, request, obj=None):
184183
if obj:
185184
request.toolbar.set_object(obj)
186185
request.toolbar.populate()
187-
request.resolver_match = resolve(request.path)
188186
request.toolbar.post_template_populate()
189187
return request
190188

@@ -193,8 +191,6 @@ def _add_default_permissions(self, user):
193191
user.user_permissions.add(Permission.objects.get(codename='add_text'))
194192
user.user_permissions.add(Permission.objects.get(codename='delete_text'))
195193
user.user_permissions.add(Permission.objects.get(codename='change_text'))
196-
# Page permissions
197-
user.user_permissions.add(Permission.objects.get(codename='publish_page'))
198194
user.user_permissions.add(Permission.objects.get(codename='add_page'))
199195
user.user_permissions.add(Permission.objects.get(codename='change_page'))
200196
user.user_permissions.add(Permission.objects.get(codename='delete_page'))

tests/requirements/compile.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,11 @@
1919
"py39-dj42-cms41": [],
2020
"py310-dj42-cms41": [],
2121
"py311-dj42-cms41": [],
22-
"py311-djmain-cms41": [],
22+
"py312-dj42-cms41": [],
23+
"py310-dj50-cms41": [],
24+
"py311-dj50-cms41": [],
25+
"py312-dj50-cms41": [],
26+
"py311-djmain-cms4dev": [],
2327
}
2428

2529
django_dict = {
@@ -28,11 +32,13 @@
2832
"dj40": "Django>=4.0,<4.1",
2933
"dj41": "Django>=4.1,<4.2",
3034
"dj42": "Django>=4.2,<5",
35+
"dj50": "Django>=5.0,<5.1",
3136
}
3237

3338
cms_dict = {
3439
"cms40": "https://github.com/django-cms/django-cms/tarball/release/4.0.1.x#egg=django-cms",
3540
"cms41": "django-cms>=4.1.0rc2,<4.2",
41+
"cms4dev": "https://github.com/django-cms/django-cms/tarball/release/4.1.x#egg=django-cms"
3642
}
3743

3844

@@ -73,6 +79,12 @@ def run(*args, **kwargs):
7379
"--allow-unsafe",
7480
] + sys.argv[1:]
7581

82+
print("Upgrading pip-tools")
83+
for py_ver in {key.split("-")[0] for key in COMPILE_SETTINGS.keys()}:
84+
args = [f"python{py_ver[2]}.{py_ver[3:]}", "-m", "pip", "install", "--upgrade", "pip-tools"]
85+
subprocess.run(args, capture_output=True)
86+
87+
print("Creating requirement files")
7688
for key, value in COMPILE_SETTINGS.items():
7789
run(
7890
get_args(key + "-default.txt", value, common_args),

tests/requirements/py310-dj32-cms41-default.txt

Lines changed: 27 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,17 @@
44
#
55
# requirements/compile.py
66
#
7-
asgiref==3.6.0
7+
asgiref==3.7.2
88
# via django
99
beautifulsoup4==4.12.2
1010
# via bs4
1111
bs4==0.0.1
1212
# via -r requirements.in
13-
coverage==7.2.3
13+
coverage==7.3.2
1414
# via -r requirements.in
15-
dj-database-url==2.0.0
15+
dj-database-url==2.1.0
1616
# via django-app-helper
17-
django==3.2.19
17+
django==3.2.23
1818
# via
1919
# dj-database-url
2020
# django-classy-tags
@@ -23,59 +23,64 @@ django==3.2.19
2323
# django-parler
2424
# django-sekizai
2525
# django-treebeard
26+
# djangocms-admin-style
2627
# djangocms-versioning
27-
django-app-helper==3.2.0
28+
django-app-helper==3.3.3
2829
# via -r requirements.in
29-
django-classy-tags==4.0.0
30+
django-classy-tags==4.1.0
3031
# via
3132
# -r requirements.in
3233
# django-cms
3334
# django-sekizai
34-
django-cms==4.1.0rc3
35-
# via
36-
# -r requirements.in
37-
# djangocms-versioning
38-
django-formtools==2.4
35+
django-cms==4.1.0rc5
36+
# via djangocms-versioning
37+
django-formtools==2.4.1
3938
# via django-cms
4039
django-fsm==2.8.1
4140
# via
4241
# -r requirements.in
4342
# djangocms-versioning
4443
django-parler==2.3
4544
# via -r requirements.in
46-
django-sekizai==4.0.0
45+
django-sekizai==4.1.0
4746
# via
4847
# -r requirements.in
4948
# django-cms
5049
django-treebeard==4.7
5150
# via django-cms
52-
djangocms-admin-style==3.2.4
51+
djangocms-admin-style==3.2.6
5352
# via django-cms
5453
djangocms-versioning @ https://github.com/django-cms/djangocms-versioning/tarball/master
5554
# via -r requirements.in
5655
docopt==0.6.2
5756
# via django-app-helper
58-
flake8==6.0.0
57+
flake8==6.1.0
5958
# via -r requirements.in
60-
isort==5.12.0
59+
isort==5.13.1
6160
# via -r requirements.in
6261
mccabe==0.7.0
6362
# via flake8
64-
packaging==23.1
63+
packaging==23.2
6564
# via django-cms
66-
pycodestyle==2.10.0
65+
pycodestyle==2.11.1
6766
# via flake8
68-
pyflakes==3.0.1
67+
pyflakes==3.1.0
6968
# via
7069
# -r requirements.in
7170
# flake8
72-
pytz==2023.3
71+
pytz==2023.3.post1
7372
# via django
7473
six==1.16.0
7574
# via django-app-helper
76-
soupsieve==2.4.1
75+
soupsieve==2.5
7776
# via beautifulsoup4
7877
sqlparse==0.4.4
7978
# via django
80-
typing-extensions==4.5.0
81-
# via dj-database-url
79+
typing-extensions==4.9.0
80+
# via
81+
# asgiref
82+
# dj-database-url
83+
84+
# The following packages are considered to be unsafe in a requirements file:
85+
setuptools==69.0.2
86+
# via django-cms

tests/requirements/py310-dj32-cms41-versioning.txt

Lines changed: 27 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,17 @@
44
#
55
# requirements/compile.py
66
#
7-
asgiref==3.6.0
7+
asgiref==3.7.2
88
# via django
99
beautifulsoup4==4.12.2
1010
# via bs4
1111
bs4==0.0.1
1212
# via -r requirements.in
13-
coverage==7.2.3
13+
coverage==7.3.2
1414
# via -r requirements.in
15-
dj-database-url==2.0.0
15+
dj-database-url==2.1.0
1616
# via django-app-helper
17-
django==3.2.19
17+
django==3.2.23
1818
# via
1919
# dj-database-url
2020
# django-classy-tags
@@ -23,59 +23,64 @@ django==3.2.19
2323
# django-parler
2424
# django-sekizai
2525
# django-treebeard
26+
# djangocms-admin-style
2627
# djangocms-versioning
27-
django-app-helper==3.2.0
28+
django-app-helper==3.3.3
2829
# via -r requirements.in
29-
django-classy-tags==4.0.0
30+
django-classy-tags==4.1.0
3031
# via
3132
# -r requirements.in
3233
# django-cms
3334
# django-sekizai
34-
django-cms==4.1.0rc3
35-
# via
36-
# -r requirements.in
37-
# djangocms-versioning
38-
django-formtools==2.4
35+
django-cms==4.1.0rc5
36+
# via djangocms-versioning
37+
django-formtools==2.4.1
3938
# via django-cms
4039
django-fsm==2.8.1
4140
# via
4241
# -r requirements.in
4342
# djangocms-versioning
4443
django-parler==2.3
4544
# via -r requirements.in
46-
django-sekizai==4.0.0
45+
django-sekizai==4.1.0
4746
# via
4847
# -r requirements.in
4948
# django-cms
5049
django-treebeard==4.7
5150
# via django-cms
52-
djangocms-admin-style==3.2.4
51+
djangocms-admin-style==3.2.6
5352
# via django-cms
5453
djangocms-versioning @ https://github.com/django-cms/djangocms-versioning/tarball/master
5554
# via -r requirements.in
5655
docopt==0.6.2
5756
# via django-app-helper
58-
flake8==6.0.0
57+
flake8==6.1.0
5958
# via -r requirements.in
60-
isort==5.12.0
59+
isort==5.13.1
6160
# via -r requirements.in
6261
mccabe==0.7.0
6362
# via flake8
64-
packaging==23.1
63+
packaging==23.2
6564
# via django-cms
66-
pycodestyle==2.10.0
65+
pycodestyle==2.11.1
6766
# via flake8
68-
pyflakes==3.0.1
67+
pyflakes==3.1.0
6968
# via
7069
# -r requirements.in
7170
# flake8
72-
pytz==2023.3
71+
pytz==2023.3.post1
7372
# via django
7473
six==1.16.0
7574
# via django-app-helper
76-
soupsieve==2.4.1
75+
soupsieve==2.5
7776
# via beautifulsoup4
7877
sqlparse==0.4.4
7978
# via django
80-
typing-extensions==4.5.0
81-
# via dj-database-url
79+
typing-extensions==4.9.0
80+
# via
81+
# asgiref
82+
# dj-database-url
83+
84+
# The following packages are considered to be unsafe in a requirements file:
85+
setuptools==69.0.2
86+
# via django-cms

0 commit comments

Comments
 (0)